数组与指针的一些关系
本文主要是理解这几个符号的意思a, a[0], &a, &a[0](前提是定义了数组int a[10]);
1、a代表的是数组名,a作左值的时候,表示的数组a[10]的整个内存空间的大小(也就是10*sizeof(int)这么多个字节)。a作右值的时候表示的是数组首元素的首地址,它的值和&a[0]的值是一样的,意义也完全一样,完全可以互相代替。同时因为在C语言中规定,数组是不能够整体访问的,所以a是不能够作左值的。
2、a[0]表示的数组的第0个元素。当a[0]作左值的时候,表示的是a[0]这个元素的内存空间,也就是sizeof(int)个字节的大小。当a[0]作右值的时候,表示的是a[0]这个地址空间所存放的数(房子里面住的人)。
3、&a表示的是数组的首地址,它的数值和数组首元素的首地址&a[0]、a完全一样,但是意义不一样。因为意义不一样,所以导致他们在参与运算的时候有不同的表示。&a是常量,不能做左值。
特别注意区分a和&a,虽然两个的数值的一样的,但是他们的意义不一样,a代表数组的首地址(意义是数组整个内存空间大小(10*sizeof(int))的首地址),&a代表的是数值首元素的首地址(意义是数组的首元素的内存空间大小(sizeof(int))的首地址)