C 语言基础一:关键字

165 阅读4分钟

一、程序入口

#include <stdio.h>

int main(void){
    printf("hello,world\n");
    return 0;
}

  • #include <stdio.h>导入包,std是标准,io是输入输出
  • printf打印方法
  • return 0 终止main函数

二、关键字

关键字解释
auto声明局部变量的存储类型,表示该具有自动存储期,可省略.变量存储在栈内存
extern 声明全局变量或函数,在告诉编译器其他文件中 ,可直接使用.存储在静态区,和static一样
register 存储类说明符,告诉编辑器将变量存储在cpu的寄存器中,提高访问速度.和变量一样的生命周期
static静态变量,存储在静态区
const常量,const修饰后值不能再改变,只读存储区
break跳出每次循环
switch/case/defaultswitch语句
char基本数据类型,存储单个字符或者小整数
continue 结束当前循环,进入下次循环
do-whilewhile循环语句
doublefloat数据类型,浮点类型
if-else判断语句
enum 枚举
for循环语句
goto快速跳转语句
if判断语句
int整形变量
long长整形变量
short短整形变量
signed 和 unsigned限定整数类型的取值范围,修饰int 和char类型
sizeof计算数据类型长度(占字节数)
struct结构体
typedef用来给数据类型取别名
union声明共用体类型
volatile说明变量在程序执行过程中可被隐含的改变

1. auto用法

int main(void){
    
   // 1.自动存储期:auto变量进入作用域分配内存、离开作用域释放内存
   // 2. auto声明的变量是块级作用域
   // 3. 不初始化auto声明的变量是未定义的
    
    auto int x = 10;
    //等价(省略auto)
    int y = 10;
    return 0;
}

2. continuebreak区别

int main(void){

    for (int i = 1; i <= 10; i++) {
        if(i == 5){
            continue;
        }
        printf("%d \n",i);  //输出1 2 3 4 6 7 8 9 10
    }
    
    
    for (int i = 1; i <= 10; i++) {
        if(i == 5){
            break;;
        }
        printf("%d \n",i);  //输出1 2 3 4
    }
    
    return 0;
}

3. do-whilewhile的区别

int main(void){

    
    //do-while至少执行一次
    int i = 0;
    do {
        i++;
        printf("%d \n",i);
    } while (i < 0);
    
    //while语句
    int j = 0;
    while (j < 0) {
        j++;
        printf("%d \n",j);
    }
    
    return 0;
}

4. enum枚举

enum WeakDay{
    MON,
    TRU,
    WED
};

int main(void){
    
    enum  WeakDay today = TRU;
    if(today == WED){
        printf("yes");
    }
    return 0;
}

5. float和double区别

int main(void){
    
    // float 单精度(6-7有效数字) 占用4字节
    // double 单精度(15-16有效数字) 占用8字节
    
    float f = 1.23456789f; //以f为结尾的float类型
    double d = 1.23456789;  //默认是double类型
    
    printf("float : %.9f\n",f);  // float : 1.234567881 (丢失精度)
    printf("double : %.9f\n",d); // double : 1.234567890  (保持精度)
    
    return 0;
}

6. signedunsigned

int main(void){
    
    // signed 能表示负数/零/正数  不修饰默认signed
    // unsigned 只能是零/正数
    
    signed char a = -15;  //取值范围 -128 到 127
    unsigned char b = 15;  //取值范围  0到255
    
    signed int c1 = -15;  // 取值范围-2147483648 到2147483647
    unsigned int c2 = 15;  // 取值范围 0 到 4294967295
    
    //运算的情况 1: 无符号数 不会溢出
    unsigned char d1 = 255;
    d1 = d1 + 1;
    printf("%d \n",d1); // 输出0 (256 % 256 = 0)
    d1 = d1 + 1;
    printf("%d \n",d1); // 输出1 (257 % 256 = 1)
    
    // 运算的情况2:
    signed char d2 = 127;
    d2 = d2 + 1;
    printf("%d \n",d2);  //结果未被定义,有可能输出-128,也有可能导致程序崩溃
    
    //隐式类型转换的问题: 同时有有符号和无符号,有符号数会转换为无符号数
    int f1 = -1;
    unsigned int f2 = 10;
    
    if(f1 < f2){
        printf("f2 大");  //不会执行,因为a会被转换成一个很大的正数
        
    }else{
        printf("f1 大");
    }
    

    return 0;
}

7. sizeof用法

int main(void){
    
    // 计算数据类型的大小
    printf("int: %zu 字节\n",sizeof(int)); // int: 4 字节
    printf("char: %zu 字节\n",sizeof(char)); //char: 1 字节
    printf("double: %zu 字节\n",sizeof(double));  // double: 8 字节
    
    // 计算变量的大小
    int x = 10;
    printf("x变量所占字节: %zu 字节\n",sizeof(x)); // x变量所占字节: 4 字节
    
    // 计算数组的大小
    int arr[5];
    printf("数组大小: %zu 字节\n",sizeof(arr));  // 数组大小: 20 字节
    printf("数组某个元素大小: %zu 字节\n",sizeof(arr[0]));  // 数组某个元素大小: 4 字节
    printf("数组元素个数: %zu 字节\n",sizeof(arr)/sizeof(arr[0])); // 数组元素个数: 5 字节
  
    return 0;
}