MENU

快速入手C语言——有编程语言基础

March 9, 2021 • 计算机语言

数据类型

  • 基本类型:整数型和浮点型
  • 枚举类型:用来定义在程序中,只能赋予其一定的离散整数值的变量
  • void类型:空类型
  • 派生类型:指针类型、数组类型、结构类型、共用体类型和函数类型

变量与常量

#include <stdio.h>
#define VALUE 10  // 常量定义
extern int i; // 变量外部声明

int main(){
    char str = 'a';
    int i = 1; // 定义加初始化
    float j = 1.0;
    double k = i / j;
    const char LOCALVALUE = 'A';

    printf("Hello World!字符str:%c\n", str);
    printf("整型i:%d,单精度浮点型j:%f,双精度浮点型k:%lf\n", i,j,k);
    printf("i的字节长度:%d,j的字节长度:%d,k的字节长度:%d\n", sizeof(i),sizeof(j),sizeof(k));

    printf("常量VALUE:%d\n", VALUE);
    printf("局部常量LOCALVALUE:%c\n", LOCALVALUE);
    return 0;
}

输出结果:
变量与常量

存储类

第一个文件main.c

#include <stdio.h>
extern void func();
 
static int count = 5; /* 全局静态变量 */
 
main()
{
    while(count--){ func();}
    return 0;
}

第二个文件support.c

#include <stdio.h>

/* 函数定义 */
extern int count;

void func(void)
{
    static int i = 5; /* 局部静态变量 */
    i++;
    printf("i is %d and count is %d\n", i, count);
}

输出结果:
存储类

判断、循环、函数和作用域规则

#include <stdio.h>
int main ()
{
    int a = 10;
    //if语句
    if (a > 4){ printf("Yes\n");} else{ printf("No\n");}  
    a < 5 ? printf("Yes\n") :printf("No\n");
    //switch语句
    switch(a){
        case 5:
            printf("is 5\n");
            break;
        case 10:
            printf("is 10\n");
            break;
        default:
            printf("No 5 or 10\n");
    }
    // while循环
    while(a<5){printf("a less 5 forever");}
    // fore循环
    for(a;a>8; --a){printf("a value: %d\n", a);}

    return 0;
}

输出结果:
判断循环

数组、指针、字符串、结构体和共用体

#include <stdio.h>
#include <string.h>

struct Books // 声明结构体
{
    char title[50];
    int book_id;
};

union Data // 声明共用体
{
    int i;
    float f;
    char str[10];
};

int main ()
{
    int var = 20; 
    int *var1 = NULL;
    var1 = &var; // &取var地址,var1存的为地址,*var1为值20
    char var2[5]={'H','e','l','l','o'}; 
    // char var2[] = "Hello";
    struct Books Book1; // 声明Book1。类型为Books
    strcpy(Book1.title, "C语言学习"); // 不能直接赋值,具体可以查看strcpy()的实现
    Book1.book_id = 1;
    union Data data;
    data.i = 1;
    data.f = 1.0;
    strcpy(data.str, "Hello C!"); 
    
    printf("var变量的地址: %x,var1的值:%x,*var1的值:%d\n", &var,var1,*var1);
    printf("var2 变量的地址: %x,var2的值:%s\n", &var2, var2);
    printf("Book 1 名字: %s\n", Book1.title);
    printf("Book 1 编号: %d\n", Book1.book_id);
    printf("data.i : %d\n", data.i);
    printf("data.f : %f\n", data.f);
    printf("data.str : %s\n", data.str); // 由于共用体公用一段内存空间,故这里只有data.str会正常输出

    return 0;
}

输出结果:
数组字符

更多字符串操作函数:strcat();strlen();strcmp();strchr();strstr()

拓展

C语言中->使用说明

#include <stdio.h>
struct Data{
    int a,b,c;
}; // 注意结构体这里要写分号

main(){
    struct Data* p;
    struct Data data = {1,2,3};
    p = &data;
    int x = p->a;
    printf("x value:%d\n", x);
    p->b = 6;
    printf("b value:%d\n", data.b);

    return 0;
}

输出结果:
-&gt;用法


c语言中volatile关键字的作用:
当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)

Last Modified: February 16, 2023
0:00