【C语言】数据类型和变量

ASCII 转义写法

  1. \141 八进制 141 → 十进制 97 → ASCII 'a'
    \x30 十六进制 30 → 十进制 48 → ASCII '0'
复制代码
   printf("%c\n", '\141');  //8进制,转十进制 为97 对应a
   printf("%c\n", '\x30'); // 16进制,转十进制,为48 对应0

转义字符( \ )

  1. 转义小总结
    1)\t → Tab 制表
    2)\b → 退格
    3)\xxx → 八进制转义,\后跟数字
    4)\\ → 打印出一个普通反斜杠\
    5)strlen统计\0之前有效字符数量,不包含结束符\0
  2. 例子求字符串的长度
    求该字符串的长度 c:\test\bit\113.c
    a) \t 是转义字符 算一个字符
    b) \b 是转义字符 算一个字符
    c) \113 是转义字符 算一个字符
  3. \0是字符串的结束标志,strlen在求字符串长度的时候,统计的是\0之前字符的个数
复制代码
   //求一个字符串的长度
   int len = strlen("abc");   //string len
   printf("%d\n", len);
   // \0 是字符串的结束标志,strlen在统计字符串长度的时候,统计的是\0 之前的字符串个数

   int len1 = strlen("c:\test\bit\113.c");
   printf("%d\n", len1);

布尔类型

  1. 0表示假,1表示真
复制代码
   bool flag = false;
   //0 表示假,1表示真
   if (flag)
   {
   	printf("haha\n");
   }
   else
   {
   	printf("hehe\n");
   }

sizeof 操作符

  1. sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字节。

  2. sizeof 的计算结果是 size_t 类型的。

  3. sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

  4. sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。

  5. size_t,用来统一表示 sizeof 的返回值类型

  6. sizeof里面的表达式不会执行

    复制代码
        short s = 2;
    	int b = 10;
    	printf("%d\n", sizeof(s = b+1));
    	printf("s = %d\n", s);

    sizeof 是求数据类型的大小,不会因数据的变化,而改变数据类型的大小

signed 和 unsigned

  1. signed 关键字,表⽰⼀个类型带有正负号,包含负值;
  2. unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。
  3. %d:有符号 int,正常打印正负、0
  4. %u:无符号 unsigned int,只打印非负数字
复制代码
       //有符号数 用%d 可以打印正负数,以及0
   	signed int a = 10;
   	printf("%d\n", a);
   	a = -20;
   	printf("%d\n", a);
   	a = 0;
   	printf("%d\n", a);

       // 无符号数 只能打印大于0的数
       unsigned int b = 12;
       printf("%u\n", b);

全局变量和局部变量

  1. 全局变量和局部变量在内存中的存储地方

    1)局部变量是放在内存的栈区
    2)全局变量是放在内存的静态区

    3)堆区是⽤来动态内存管理的

  2. 变量初始化核心知识点

    1)局部变量

    a)位置:栈区

    b)自动初始化:不会自动初始化为 0

    c) 如果只声明不赋值,内存里是栈遗留的随机垃圾值

    d)直接使用属于未定义行为,结果随机,每次运行可能不一样
    e)局部变量定义时手动初始化:int a = 0;
    2)static 修饰的局部变量
    a)位置:静态区(全局数据区)

    b)生命周期:程序整个运行周期,函数结束不销毁

    c) 自动初始化:不赋值默认就是 0,只初始化一次

    复制代码
    void test(){
        static int a;
        printf("%d",a); //输出0
    }

    3)全局变量
    a)位置:静态区

    b)自动初始化:不写 = 0,默认自动初始化为 0

    c) 生命周期:整个程序

    复制代码
    int g_num; //全局,默认0
    int main(){
        printf("%d",g_num); //打印0
        return 0;
    }
  3. 总结

  4. 面试高频考点
    a)只有静态区的变量才会自动清零,栈区不会
    b)static 改变局部变量的存储位置、生命周期,不改变作用域(只能本函数内使用)。
    c) 局部变量要手动初始化

全局变量和局部变量(补充)

代码块可以访问外部全局变量

复制代码
   int a = 100;

   int main()
   {
   	printf("%d\n", a);
   	{
   		printf("%d\n", a);
   	}
   	return 0;
   }
  1. 当代码块内部没有定义变量 a时,编译器会向外层作用域查找,最终找到全局变量 a,其值为 100。

  2. { }表示一个代码块(也称为复合语句)

变量屏蔽 / 就近原则

复制代码
   //变量屏蔽
   int a = 100;

   int main()
   {
   	{
   		//全局变量和局部变量同名时,局部变量优先
   		int a = 10;
   		printf("%d\n", a);
   	}
   	return 0;
   }
  1. 局部变量和全局变量同名的时候,局部变量优先使用
  2. 大括号{ }内部定义了局部变量int a = 10
  3. 在这个大括号范围内,局部 a 优先,把全局的 a 屏蔽掉
相关推荐
智者知已应修善业12 小时前
【51单片机数码管逐位显示1-8余位不亮】2024-10-23
c语言·经验分享·笔记·嵌入式硬件·51单片机
caimouse14 小时前
ReactOS 图形系统分析(47):GDI 批处理 — gdibatch.c
c语言·开发语言
caimouse14 小时前
ReactOS 窗口系统分析(1):窗口对象与创建 — window.c
c语言·开发语言
caimouse15 小时前
ReactOS 图形系统分析(53):系统库存对象 — stockobj.c
c语言·开发语言·spring
caimouse16 小时前
ReactOS 图形系统分析(52):OpenGL 支持 — wingl.c
c语言·开发语言
j7~16 小时前
【C语言】《C语言函数递归完全指南:思想、限制、经典例题(阶乘/斐波那契/青蛙跳台阶/汉诺塔)与迭代优化》
c语言·函数递归·汉诺塔问题·青蛙跳台阶问题·递归与迭代·n的阶乘
YSL07012417 小时前
动态内存管理
c语言
BreezeJuvenile18 小时前
基于C语言的SPSC环形缓冲区程序实现
c语言·环形缓冲区
SuperByteMaster18 小时前
recursive mutex的使用场景和场景代码
c语言
caimouse18 小时前
ReactOS 窗口系统分析(2):窗口类 — class.c
c语言·开发语言