1.数组(array)由一系列类型相同的元素构成,数组声明中包括数组元素的数目和元素的类型。
2数组初始化 :1用花括号括起来的一系列数值来初始化数组.数值之间用逗号隔开,可以使用const来修饰数组,这样程序会把数组中的每个元素当成常量来处理。
未经初始化的数组,其数组元素的数值是不定的。编译器使用的数值是存储单元中已有的数值。如果部分初始化数组,未初始化的元素则被设置为0.
指定初始化数组有两个重要特性:第一如果在一个指定初始化项目后跟有不止一个值,则这些数值将用来对后续的数组元素初始化,第二,如果多次对一个元素进行初始化,则最后一次有效。
3.C不支持把数组作为一个整体来进行赋值,也不支持用花括号括起来的列表形式进行赋值(初始化的时候除外)
4 数组名是一个地址常量,数组名同时也是该数组首元素的地址
5 在C中,对一个指针加1的结果是对该指针增加一个存储单元,对于数组而言地址会增加到下一个元素的地址,而不是下一个字节
6指针 :指针的数值就是它所指向的对象的地址。在指针前运用运算符 * 就可以得到该指针所指向的对象的数值。对指针加1,等价于对指针的值加上它的对象字节的大小
short dates[50];
dates+2==&dates[2] /*相同的地址*/
*(dates +2)==dates[2] /*相同的值*/ 注意一下区分*(dates+2)/*dates的第三个元素的值 */ 和 *dates+2 /*第一个元素的值和2相加 */ ,间接运算符(*)的优先级高于+ ,因此后者等价于(*dates)+2.
7 一元运算符 * 和++有相同的 优先级,但它的结合的时候是从右向左进行的, 如 *test++, ++应用于test,而不是*test,也就是说是指针自增1,而不是指针所指向的数据增加1
8 转载的 int *a[10] :数组指针.数组a里存放的是10个int型指针
int (*a)[10] :a是指针,指向一个数组.此数组有10个int型元素
int *a[10]
先找到声明符a,然后向右看,有[]说明a是个数组,再向左看,是int *,说明数组中的每个元素是int *.所以这是一个存放int指针的数组.
int(*a)[10]
先找到声明符a,被括号括着,先看括号内的(优先级高),然后向右看,没有,向左看,是*,说明s是个指针,什么指针?在看括号外面的,先向右看,有[] 是个数组,说明a是个志向数组的指针,再向左看,是int,说明数组的每个元素是int.所以,这是一个指向存放int的数组的指针.