因为int a[5]的含义是内存帮你开辟一个能放5个int大小的空间,它的控件首地址为a
int *pa的含义是定义一个变量叫pa,它做了*运算之后,就是一个int,所以pa就是个指针,指针变量可以保存地址
综上,pa=a是把你开辟的那个空间的首地址赋予pa这个指针变量
这才合乎逻辑。
以上是依照原理解释。
下面加上一个无脑的解释,一般小时候老师都这么说:这就是语法,固定用法,记住就行!
int a[5],i,*pa;
pa=a;
而不是这样写 pa=a[5] 分析如下:
首先,a[5]是不正确的写法,int a[5];//表示定义了一个包含5个元素的一维整型数组,数组元素分别是:a[0]~a[4],没有a[5]这个元素
其次,pa是一个指针变量,给它赋值的数据,只能是地址。比如:pa=&a[1];的写法是正确的
a和a[5]代表的意义不同
a是数组名,同时也是整形指针类型,int *const,而a[i]是int类型。(a[5]是越界的)
这里面pa定义的是整形指针类型,当然得用指针类型为其赋值。
可以用pa = a; 或者pa = &a[i];