代码改变世界

C语言一些没记住总是google的

2011-01-30 17:23  Jeff  阅读(282)  评论(0编辑  收藏  举报
1. Case后面只能跟整型或者字符型的常量或常量表达式 2. 如果p1 和p2 指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。 而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。 所以很多函数的参数是void*,这样能接受所有类型的指针. 3. const int *p; // p 可变,p 指向的对象不可变 int const *p; // p 可变,p 指向的对象不可变 int *const p; // p 不可变,p 指向的对象可变 const int *const p; //指针p 和p 指向的对象都不可变 4. C99中,增加flexible array的定义
 
    typedef struct st_type
   {
      int i;
      int a[0];
    }type_a;
    
或者写成:
 
    typedef struct st_type
    {
      int i;
      int a[];
    }type_a;
   
5. 数组名不能作为左值,可以把a[i]当左值. 6. 对指针进行加1 操作,得到的是下一个元素的地址,而不是原有地址值直接加1。所以,一个类型为T 的指针的移动,以sizeof(T) 为移动单位。 7. int *p1[10]; 指针数组, 这是一个数组,其包含10 个指向int 类型数据的指针 int (*p2)[10]; p2 是一个指针,它指向一个包含10 个int 类型数据的数组,即数组指针