指针问题 请大家指教

BJUTmark 2008-06-23 04:32:04
int (*ptr)[3]; 类型int(*) [3] 定义一个指针,指向一个int类型的数组;
那么 我象下面这样写为什么是错误的?
int a[3]={0,1,2};
int (*p)[3]=a;
...全文
73 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-06-23
  • 打赏
  • 举报
回复
int (*ptr)[3];
ptr是一个指针变量,指向包含3个整形元素的一维数组

*ptr有四个元素,每个元素为整形,也就是ptr所指向的对象是有3哥整形元素的数组,即ptr是行指针。此时,ptr只能指向一个包含3个元素的一维数组,ptr的值就是该一维数组的首地址。ptr不能指向一维数组中的第j个元素!

p-> (*p)[0] (*p)[1] (*p)[2]




main()
{
int a[3][4] = {1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4] ,i = 2,j = 2;
p = a ;
printf("a[2,2]=%d",*(*(p+i)+j));
}
ttkk_2007 2008-06-23
  • 打赏
  • 举报
回复

int a[][3] = {1,2,3};
int (*p)[3] = a;
wanght99 2008-06-23
  • 打赏
  • 举报
回复
p是指向指针的指针,表达式"a"返回一个指向int的指针.
两边类型不匹配.
yyyapple 2008-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 BJUTmark 的回复:]
int a[3]={0,1,2};
int (*p)[3]=&a;

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

你应该弄清楚数组也是一个数据类型,就像int类型一样,只不过它是一个复合结构
BJUTmark 2008-06-23
  • 打赏
  • 举报
回复
int a[3]={0,1,2};
int (*p)[3]=&a;

是不是这时候P就是一个表示含有3个int指针类型的数组的首地址?
xiaozhiwei 2008-06-23
  • 打赏
  • 举报
回复
p是一个指向 int型数组指针

所以 int (*p)[3] = &a
yyyapple 2008-06-23
  • 打赏
  • 举报
回复
int a[3]={0,1,2};
int (*p)[3]=a;

应该这样
int (*p)[3]=&a;
a也可以表示首元素地址,但要表示整个数组地址用取地址符号&
xkyx_cn 2008-06-23
  • 打赏
  • 举报
回复

int a[3]={0,1,2};
int (*p)[3]=&a;

69,382

社区成员

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

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