前言
本文主要对于往年小组纳新必考的知识点进行归类,总结与归纳,更多细节请自行学习了解
文件下载
正文
-
二维数组下标以及对应值的关系(包括但不限于下标为-1 ,以及从 0 开始等)
-
二维数组的地址存储方式以及系统寻址方式
- 对于
一维数组
,1[array] == array[1]
- 对于
二维数组
array[M][n],元素 array[i][j] 的地址是(*arr) + i * N + j
,(-1)[array][5])就是array[-1][5]
,即值为* ((*array) + (-1)* N + 5)
,1[array][2]
为* ((*array) + 1* N + 2)
- 对于
-
sizeof()对于指针以及数组,结构体和常见数据类型的运算
-
strlen()和 sizeof()对于字符串的大小计算
-
与 ,或 ,非 运算
与&: 同时为“1”,结果才为“1”,否则为0
或|: 只要有一个为1,其值为1
非~: 取反
异或^:两个相应位为“异”(值不同),则该位结果为1,否则为0
-
二进制中有几个 1(原理:从右往左遇到 1,将 100&011 得到 000)
for (unsigned int i = 0; num; i++)
{
num &= (num - 1);
}
return i;
- 当有’#‘或’##'的时候,宏嵌套宏并不能有效的展开,此时需要多加一层宏进行转换。
#define YEAR 2018
#define LEVELONE(x) "XiyouLinux "#x"\n"
#define LEVELTWO(x) LEVELONE(x)
int main(int argc, char *argv[])
{
printf(LEVELONE(YEAR)); //XiyouLinux YEAR
printf(LEVELTWO(YEAR)); //XiyouLinux 2018
}
- C 语言程序从源代码到形成可执行文件经过(预处理,编译,汇编,链接)
- 对于结构体和联合体进行 sizeof()计算需要考虑字节对齐
- 大小端
- 大端是高字节存放到内存的低地址
- 小端是高字节存放到内存的高地址
char n[] = {2, 1, 0, 0}; //高地址 低地址 //00000000 00000000 00000001 00000010//258 // n3 n2 n1 n0 printf("%d\n", *(int *)n); //258
- 对于局部变量要注意外部引用的方式
- 对于宏替换变量时要注意变量尽可能的用括号括
- malloc 申请一定空间,此时空间的初始值要记得清空
- 数组的地址,数组中不同元素的地址,以及地址+1 的结果要区分
int a[4] = { 2, 0, 1, 9 }; printf("%p, %p\n", a, &a); printf("%p, %p\n", a + 1, &a + 1);
- 递归结束条件
- 冒泡,选择,快排
- 大小端的验证
- 数据类型的范围以及超出范围后的数值规律
char ch = 128;//char:-128~~127 -128
- printf 返回值(字符个数)
- static 对于局部变量来说只定义一次,不销毁
- << >>移位运算符
- a++以及++a 的先后顺序
- 以上