注册 登录
编程论坛 C++教室

[求助]请教一个关于指针的问题

chf710 发布于 2007-04-17 21:32, 478 次点击

int main( )
{ int a[2][3]={11,15,19,21,25,29};
int *p;
p=a[0];
cout<<"a="<<a<<endl
<<"a[0]="<<a[0]<<endl
<<"p="<<p<<endl
<<"*a="<<*a<<endl
<<"*a[0]="<<*a[0]<<endl
<<"*p="<<*p<<endl
return 0;}

执行上面这段代码,结果为:

a=0012FF68
a[0]=0012FF68
p=0012FF68
*a=0012FF68
*a[0]=11
*p=11

如上所示,a 既然是数组的首地址,那么 *a 就应该是对数组a首地址的取值,即 *a应该是11,可为什么结果中*a还是数组a的首地址?

4 回复
#2
游乐园2007-04-17 22:08

把a相象成一个一维数组 包含2个元素 a[0],a[1],而每个元素a[n]自身又包含3个元素

p=a[0]; //是把这个数组的地址赋给p

*p或者*a[0] 就是a[0]中的第一个元素值 .*p+1 是a[0]数组中第二个元素的值 ...

*(p+1) 就是a[1]中的第一个元素的值

你的疑问是 *a 是怎么回事 ,因为a是个包含着数组元素的数组,所以本身不是一个单独的整形的值 ,而是一个数组 所以*a 是地址 也就是首地址

就是说 a是指向这个大的一维数组的地址 而*a 是指向这个大的一位数组中第一个元素(因为是数组)的地址

#3
yuyunliuhen2007-04-17 22:19

#include<iostream>
using namespace std;
int main( )
{ int a[2][3]={11,15,19,21,25,29};
int *p;
p=a[0];
cout<<"a="<<a<<endl
<<"a[0]="<<a[0]<<endl
<<"p="<<p<<endl
<<"**a="<<**a<<endl
<<"*a="<<*a<<endl
<<"*a[0]="<<*a[0]<<endl
<<"*p="<<*p<<endl;
cout<<typeid(*a).name()<<endl; //查看*a的类型,下同
cout<<typeid(**a).name()<<endl;
cout<<typeid(a).name()<<endl;
return 0;
}

可以看到*a 的类型是 int *,**a 才是int.也就是说**a的值才是11.

#4
yuyunliuhen2007-04-17 22:28
还是二楼的比较容易理解
#5
aipb20072007-04-17 23:22

记住一点就行了,2维数组实际上是不存在的,所谓2维数组就是数组的数组!

所以a[3][4];

int (*p)[4] = a;

1