1.数组定义
当定义一个数组a时,编译器根据指定的元素个数和元素类型分配确定大小(元素个数*sizeof(元素类型))的一块内存,并把这块内存的名字命名为a
eg: int a[5]
sizeof(a)=20
sizeof(a[0])=4
sizeof(a[5])=4 这里sizeof(a[5]) ? = 4呢
首先,sizeof是个关键字,不是函数;函数求值是在运行的时候,而关键字sizeof求值是在编译的时候。虽然a[5]这个元素并不存在,但是这里编译器并没有真正的去访问它,而是仅仅根据数组元素的类型来确定其值,即sizeof(a[5]) = sizeof(int) = 4
2.数组中a,&a,&a[0]区别
eg: int a[5]
a:表示数组首元素的地址,与&a[0]相同
&a:表示数组的首地址
&a[0]:与a相同
但是这三个的值大小是相等
PS:数组名不能作为左值
3.以指针形式访问和以下标形式访问
char *p = "654321";
以指针形式访问指针(读取2):*(p + 4) //先取出p里面存储的地址值,再加4个char型偏移
以下标形式访问指针(读取2):p[4] //编译器总是把以下标形式的操作解析为以指针的形式操作
char a[] = "fedcba";
以指针形式访问数组(读取d):*(a+4) //这里的a = &a[0]
以下标形式访问数组(读取d):a[4]