一个小问题,关于指针的

snowingbf 2007-10-13 11:31:06
设int s[3][2]={1,2,3,4,5,6},(*p)[2]=s;,则*(*(p+1)+1)的值是__________

p是指向指针的指针么?
这道题应该怎么理解?
...全文
120 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2007-10-15
  • 打赏
  • 举报
回复
数组名和指针虽然不是一会事,但至少它们有一点是一样的:即都可以进行地址运算,也就是基于地址的加加减减。
而且,对任何一个指针或数组名x,*(x + 1)永远都等价于x[1](这也是为什么你写1[x]也能通过编译的原因,因为*(x + 1)跟*(1 + x)本来就应该是一样的)。

按照以上说的,由于内层的"*(p + 1)"等价于p[1],于是"*(*(p + 1) + 1)"就等价于*(p[1] + 1),即p[1][1]。
snowingbf 2007-10-15
  • 打赏
  • 举报
回复
*(p[1]+1) == (p[1])[1] == p[1][1]

不是一维数组么?
整形数组怎么又代表指针了呢?

求详解!
不是各位回答的不好,而是我实在的笨
snowingbf 2007-10-14
  • 打赏
  • 举报
回复
外边还有个括号呢,又解引用了一次 *( )
lw1a2 2007-10-14
  • 打赏
  • 举报
回复
p是一个指针,指向一个2维数组
s可以看作是一个2维数组,每维的元素又是一个3维数组

(p+1),指向s的第2维
*(p+1),指向s的第2维的3个元素的第1个
*(p+1)+1,指向s的第2维的3个元素的第2个
*(*(p+1)+1),s的第2维的3个元素的第2个值
ckt 2007-10-14
  • 打赏
  • 举报
回复
p是指向第一维的

*(p+1)第1行

*(p+1)+1 第1行第1个

所以为4
Soli 2007-10-14
  • 打赏
  • 举报
回复

上面那个搞得有点错位。


int (* p)[ 2 ];
| | | | |
5 2 1 3 4


按下面标的序号解读该声明式:
1.定义一个变量p
2.这个p是个指针
3.这个指针指向一个数组
4.这个数组长度为2
5.这是个整型数组

总之,这个声明是的意思是:定义一个指向长度为2的整型(一维)数组的指针变量p

解析原则是:一变量名为中心,逐层向外,先右后左,括号内优先。
Soli 2007-10-14
  • 打赏
  • 举报
回复

int (* p)[ 2 ];
| | | | |
5 2 1 3 4

按下面标的序号解读该声明式:
1.定义一个变量p
2.这个p是个指针
3.这个指针指向一个数组
4.这个数组长度为2
5.这是个整型数组

总之,这个声明是的意思是:定义一个指向长度为2的整型(一维)数组的指针变量p

解析原则是:一变量名为中心,逐层向外,先右后左,括号内优先。

Soli 2007-10-14
  • 打赏
  • 举报
回复

p == s

*(p+1) == p[1]

*(p[1]+1) == (p[1])[1] == p[1][1]

*( *(p+1) + 1 ) == p[1][1]

方括号[]是下标运算符,*为取内容运算符,

可以认为p[1]是执行了两步:指针p前移1步;取其内容
亦即:q = p+1;*q 即 *(p+1)
故 *(p+1) == p[1]
其他情况类推
王二牛放犇 2007-10-14
  • 打赏
  • 举报
回复
(*p)[2]=s 这条语句是指向数组行,还是数组列?有问题吧,如果这个不确定,那结果不一样
chen_liang747703 2007-10-14
  • 打赏
  • 举报
回复
看了半天高手们的留言才看懂了!真的是4啊!
哈哈!有收获。
zhouhong0801 2007-10-14
  • 打赏
  • 举报
回复
(*p)[2]是一个指针数组

*(p+1)是s[1]

*(p+1)+1就是s[1]中的第二个元素s[1][1],也就是4
eliuzhi 2007-10-14
  • 打赏
  • 举报
回复
不好意思,把逗号看成分号了,错了错了,结果应该是4。
eliuzhi 2007-10-14
  • 打赏
  • 举报
回复
这题对吗?
1:s可以理解为是一个int× 类型
2:题中(*p)[2]=s;可以解释为 (*p) 是一个int** 类型
3:那p 就是 int*** 类型
4:那*(p+1) 就是指向了一个未知的地址啊?

或者这样理解
(*p) = (*(p+0)) 和 *(p+1)没关系啊?
snowingbf 2007-10-14
  • 打赏
  • 举报
回复
p+1又是怎么和s的第二行关联起来的呢?
数组p是个整形数组还是指针数组呢?(*p)[0]和(*p)[1]怎么就代表S的两行了?
晕啊
zcy_2002 2007-10-14
  • 打赏
  • 举报
回复
int (*p)[2]
表示p是一个指针变量,它指向包含2个元素的一维数组.
*p 两侧的扩号不可缺省,如果写成*p[2],就变成了指针数组.
snowingbf 2007-10-14
  • 打赏
  • 举报
回复
s感觉是这个二维数组的首地址
那么(*p)[2]就应该是个指针了?我对(*p)[2]的含义不理解
snowingbf 2007-10-14
  • 打赏
  • 举报
回复
(*p)[2]=s;
这句是什么意思?
haozlee 2007-10-13
  • 打赏
  • 举报
回复
答案:4
/////////
p指向数组的第0行,p+1指向第1行,*(p+1)+1则指向第1行的第二个数,为4。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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