指针 我还得问以下。。。

BJUTmark 2008-06-23 05:26:45
int a[3]={0,1,2};
int (*p)[3]=&a;

是不是这时候P就是一个表示含有3个int指针类型的数组的首地址?
...全文
176 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfgongheguo 2008-06-23
  • 打赏
  • 举报
回复
mark 下 , 加深一下理解
lwouyang 2008-06-23
  • 打赏
  • 举报
回复
上面很拗口,捡例子说吧。
对数组中第二个元素的引用方法:
a[1]
*(a+1)
(a+1)[0]
*(&a[0]+1)
(&a)[0][1]
*((&a)[0]+1)
*(&a+1)[0] ==> 错了!
p[0][1]
(*p)[1]
*p[1] ==> 错了!
*(p[0]+1)
*(*p+1)
*(*(p+1)) ==> 错了!
lwouyang 2008-06-23
  • 打赏
  • 举报
回复
1、a 是一个指针,其值是一个地址,也就是说 a 指向一个包含3个int类型的数组的首地址;
2、p 是一个指针,其值是 a,也就是说 p 指向 a;
因为 a 已经是指针,所以 p 是二级指针;
因为 a 指向一个包含3个int类型的数组的首地址( a[1] ==〉 1 ),
所以 p 是一个指向一个包含3个int类型的数组的首地址的指针的指针( p[0] ==〉 a, p[0][1] ==〉 1, p[1] ==〉错了!)。
{ 0, 1, 2}

a

p
Holinan 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 BJUTmark 的帖子:]
int a[3]={0,1,2};
int (*p)[3]=&a;

是不是这时候P就是一个表示含有3个int指针类型的数组的首地址?
[/Quote]

p是一个指针,他指向的内容是一个数组,这个数组里面存了3个整形数。

所以p其实就是指向了数组a的首地址
superIT3107 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 BJUTmark 的帖子:]
int a[3]={0,1,2};
int (*p)[3]=&a;

是不是这时候P就是一个表示含有3个int指针类型的数组的首地址?
[/Quote]

a已经是地址了
&又是地址的意思
那么&a就是地址的地址
所以int (*p)[3]=&a;就是3个int指针类型的数组的首地址
长安宁 2008-06-23
  • 打赏
  • 举报
回复
int *p[3];这个是一个有三个元素的数组,里面的每个元素都是 int *型;
而int (*p)[3];是一个指向三个元素数组的指针
所以 int (*p)[3]=&a[3]; 正好内在模型匹配,而数据名可以代表数组,所以简写成 int (*p)[3]=&a;
yyyapple 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dennis101 的回复:]
错了。
3个int指针类型的数组,定义应是int *p[3];
int (*p)[3]中p是一个指向长度为3的int数组的指针。
前者是指向指针的数组,后者是指向数组的指针,请仔细体会。
[/Quote]
chenhj_wo 2008-06-23
  • 打赏
  • 举报
回复
问题没看懂
ww2734 2008-06-23
  • 打赏
  • 举报
回复
看似有些不妥,
int (*p)[3]=&a;
前面是二级的,后面是一级的……
ww2734 2008-06-23
  • 打赏
  • 举报
回复
看似有些不妥,
int (*p)[3]=&a;
前面是二级的,后面是一级的……
星空Neo 2008-06-23
  • 打赏
  • 举报
回复

p[0][0]=0
p[0][1]=1
p[0][2]=2

K行天下 2008-06-23
  • 打赏
  • 举报
回复
楼主说的有错误:
int a[3]={0,1,2};
int (*p)[3]=&a;

是不是这时候P就是一个表示含有3个int指针类型的数组的首地址?


应该是表示一个指向 含有3个int整型的数组的 指针
你的理解是 int* p[3];这是一个数组,每一个成员都是int*这个类型!
q06380925 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dennis101 的回复:]
错了。
3个int指针类型的数组,定义应是int *p[3];
int (*p)[3]中p是一个指向长度为3的int数组的指针。
前者是指向指针的数组,后者是指向数组的指针,请仔细体会。
[/Quote]
楼上正解
day572 2008-06-23
  • 打赏
  • 举报
回复
如下就是这样
   typedef int a[3];
a *p;
   p就是这样意思.
   
dennis101 2008-06-23
  • 打赏
  • 举报
回复
错了。
3个int指针类型的数组,定义应是int *p[3];
int (*p)[3]中p是一个指向长度为3的int数组的指针。
前者是指向指针的数组,后者是指向数组的指针,请仔细体会。
maomingxu13 2008-06-23
  • 打赏
  • 举报
回复
对呀,把指针数组p指向了数组a的起始地址,所以p就是原来的a了!
ForestDB 2008-06-23
  • 打赏
  • 举报
回复
yeeeeeees.

69,322

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧