C++高手给解释一下

来源:百度知道 编辑:UC知道 时间:2024/06/22 11:18:38
int a[4]={1,2,3,4};上式表示:分配了4个连续空间分别存储1234这几个数,a是首地址,问一下是否也为a分了一块空间,这块空间存着首元素的地址呢?还是令有他说?请解释一下数组名和指针变量的异同(尤其在内存上)?

a就是这个空间,这个空间有4个数,不带参数引用a就是引用首地址。(总不能4个一起上啊!不过以后你发现4个一起上也行的!)

在引用上
a(a[0])就是1,也就是说a的首地址指向1
a+1(a[1])就是2,也就是说a的地址+1指向2
a+2(a[2])就是3
a+3(a[3])就是4

数值名和指针变量,在C语言中大多数情况下是完全等同的,因为编译成相同的机器码了。

采用a[1]和*p+1就是一样的。

最后建议楼主多看看存储器相关知识和汇编语言,到时候发现指针真他妈简单,比数组简单多了,不就是地址么。

数组名也就是地址,指针也是地址。
只不过数组是连续空间。指针是指向他们的首地址而已

a是首地址,可以把a相当于是指向a[4]的指针,但跟指针还是有点区别。

关于指针变量,举例说明吧:
int a[4];
int *p=a;

则 *(p+0)=p[0]=a[0];
*(p+1)=p[1]a[1];
*(p+2)=p[2]a[2];
*(p+3)=p[3]a[3];

指针变量一般指向堆上的一块内存空间;

没有为a分配空间,a的值就是一个具体的地址,他现在相当于一个标号(不是变量),就是见到a 就用这个地址代替就ok。可以用#define a 0x12FF.. 帮助理解。

数组名和指针变量,其实两者含义不同,数组名其实是个常量,不是左值。而指针变量(是变量哦)是个左值,把数组名(地址)赋值给指针变量,那么现在指针变量指向了那块数组,可以用指针的运算来操作数组。