c语言杂记

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;//j是int类型
    typedef int_ptr int*;
    int_ptr i, j;//均为int*类型

4.多维数组与指针

实参 形参
数组的数组 char c[10][10] char(*)[10]
指针数组 char *c[10] char**
数组指针 char(* c)[10] char(*)[10]
指针的指针 char** char**