指针与数组的关系(初学者勿看)
如下代码:
为什么b[10] = a; 是错误的,但是p = a;且正确呢?
我们都知道数组自带一个地址并且这个地址是首地址即&a[0];
他们的地址都是相同的,但你们发现没有:a是数组名,p是指针当p指向a后:p[0] <> a[0];
但是 b[10] = a;就不行;
为什么呢?
因为数组变量是一个const的指针,因此不能被赋值
如: int a[] < >int const a;
我们都知道常量不能赋值,为什么呢?
就如int a[],其中的a本身就是一个地址;
如果你进行赋值的话那你的内存中将存在两个想同地址区域,显然这是不可能的。
假如int b[];b的地址是0x1,int a[];a的地址是0x2;
如果 b = a;那么内存中将存在两个0x2内存存储区域。
还有就是由于p代表的是首地址,那么他指向一个普通变量min的时候 *p[0] <==> min< ==> p;
指向普通变量的时候不过是吧min当做一个只有一个元素的数组。但是普通变量并不代表一块内存区域,min就不代表一块内存区域的首地址,因此 p指向min的时候仍要取地址
如: