数组
如果数组中只有部分元素被初始化,则其他未被初始化的元素将会被设为0
C99之后,如果只想初始化数组中的一个元素,可以:int array[6] = { [5] = 212 }; 这样,其他的元素会被设为0
int days[7] = {31, 28, [4] = 31, 30, 31, [1] = 29};
结果:
[0]:31,[1]:29,[2]:0,[3]:0,[4]:31,[5]:30,[6]:31,[7]:0
说明:初始化是从标注出标号的开始,如果一个元素被初始化多次,则有效的是最后一次初始化
用大括号列出数值对数组进行赋值只能用于初始化,而不能用于数组元素赋值
C99和C11都支持变长数组(VLA)。VLA有一些限制,例如不能在声明数组时进行初始化
指针
不能解引用(dereference)一个未初始化的指针。因为创建一个指针变量时,只是分配了存储这个指针的内存,但并没有分配存储数据的内存(即并未给指针所将要指向的变量分配空间)。所以在使用指针之前,它所指向的变量应该是已经被分配了内存的(两种方法,一是将已经存在的变量的地址赋给指针;二是使用malloc)
例如double *p; *p = 2.1; 这就是一个错误的用法