1.关于移位操作
移位操作并未规定操作符为正整数,如果是负数或者数字比其位数还要大,将会产生未定义的错误,取决于编译器。
2.关于malloc和free的标准过程,malloc之后一定要进行是否申请成功的判断,内存使用完后要记得free,然后使其指向NULL,避免野指针。
1 2 3 4 5 6 7 8
| char* p = (char *)malloc(10); if(p == NULL) { }
free(p) p = NULL;
|
3.define和typedef的区别。
- 可以用其他类型说明符对宏进行扩展,对typedef不行。如:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #define peach int unsigned peach i; typedef int banana; unsigned banana j; ```
* 在连续的几个变量的声明中,用typedef能保证所有的变量均是同一类型,而用define无法保证。 ```c #define int_ptr int* int_ptr i, j; typedef int_ptr int*; int_ptr i, j;
|
4.多维数组与指针
实参 |
形参 |
数组的数组 char c[10][10] |
char(*)[10] |
指针数组 char *c[10] |
char** |
数组指针 char(* c)[10] |
char(*)[10] |
指针的指针 char** |
char** |