1.局部变量和全局变量
局部变量的作用域是在变量所在的局部范围,全局变量的作用域是整个工程;局部变量的生命周期是作用域内,全局变量的生命周期是整个程序的生命周期,当两者命名冲突时,优先使用的是局部变量。
2.C语言中的四种常量
-字面常量:3.14,1000,hello...
-const修饰的常量:const关键字用于声明一个变量为常量,该变量在初始化之后就不能被修改,在程序编译时确定其值,增加程序的稳定性和安全性,它可以用来修饰基本数据类型的变量,也可以用来修饰指针。
-#define定义的标识符常量:#define MAX 100 ,宏在预处理阶段将名字替换成对应的值。
-枚举常量:在枚举常量中如果未特别表明就是从0开始,只有枚举类型变量才能赋枚举成员常量值。枚举在编译阶段进行替换。参考:C语言丨关键字enum用法详解,看这篇就够了-CSDN博客
3.转义字符
\ddd表示1-3个八进制的数字,\xdd表示2个十六进制数字,\a蜂鸣,\b回退
笔试题:printf("%d\n", strlen("c:\test\628\test.c"));
4.位操作符
&:按位与;0&1=0,0&0=0,1&1=1
|:按位或;0^1=1,0^0=0,1^1=1
^:按位异或;0^1=0,0^0=1,1^1=1
5.关键字
typedef:类型重命名 typedef unsigned int uint_32;
static:static可以用来修饰局部变量、全局变量、函数;static修饰局部变量改变它的生命周期,让静态局部变量出了作用域仍旧存在,到程序结束,生命周期才结束,static修饰改变的是它的存储持续性,它的作用域仍旧是局部的。static修饰的全局变量和函数只能在本源文件内使用,其它源文件链接不上。
#define ADD(x,y) ((x)+(y));将ADD(2,3)会替换成((2)+(3))
6.指针
内存:为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
7.函数
函数可以嵌套调用但是不能嵌套定义!
函数也可以链式访问,一个函数作为另一个函数的参数printf("%d",printf("%d",printf("%d", 43)));
程序调用自身的编程技巧称为递归。递归的必要条件:存在结束条件并且每次递归接近结束条件。
8.char arr1[] = "abc"; 和 char arr2[3] = {'a','b','c'}; (使用strlen、%s输出会引发未定义行为)
9.关于数组传递的方式 void bubble_sort(int arr[], int sz)
在 C 中,数组作为函数参数时始终以指针方式传递,并且传递的是数组的首地址。
• 优点:内存开销小,只需要传递一个地址即可。
• 缺点:需要通过额外参数(如数组长度)来辅助操作数组。
10.位操作符的使用以及二进制数计算例题:计算Num中有几个bit位为1。
#include <stdio.h>
int main() {
int num = -1;
int count = 0; // 计数器
while (num) {
count++;
num = num & (num - 1);
}
printf("二进制中1的个数 = %d\n", count);
return 0;
}
—10.1二进制数在计算机中如何完成运算?
原码转换为补码:
正数:原码与补码相同,无需转换。
负数:取反:将原码的数值部分(不包括符号位)按位取反;加一:在取反结果上加 1得到补码。补码还原为原码:
正数:补码与原码相同,无需转换。
负数:减一:从补码中减去 1;取反:将减一后的结果按位取反,得到原码的数值部分。
—10.2 num = num & (num - 1);
num-1会将num最右边的1变为0,再将该位的右边所有0变成1;num&(num-1)就会将该位右边变成1的所有位数又消成0,这样就达到了将num的最右位1消掉的目的,循环就统计出num中1的个数。
11.++操作的返回值是该数值本身;&&逻辑与遇到否情况直接中断;逻辑或||遇到真情况直接中断;
#include <stdio.h>
int main() {
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;//到a++返回a值判断是0直接结束,后面不进行判断
i = a++ || ++b || d++;//到a++返回a为1也直接结束,后面不进行判断
printf("a = %d\n", a);//2
printf("b = %d\n", b);//2
printf("c = %d\n", c);//3
printf("d = %d\n", d);//4
return 0;
}