关于二维数组的一道面试题,求解

milanleon 2012-11-17 12:39:13
代码:
int ary[3][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}};
问(ary + 1)[1]、*(ary + 1)[1]、(*(ary + 1))[1]值是多少?

我上机试了下发现输出为一个地址、8、5, 不知道为什么?
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
SKATE11 2012-11-17
  • 打赏
  • 举报
回复
第二个有些不明白 难道*的优先级比[]低!!!
booson 2012-11-17
  • 打赏
  • 举报
回复

ary 	//  ary 相当于一个数组的ary[4]指针,加1 一次移动 16b,指向 ary[1]
(ary+1) 	// (ary+1) -> ary[1] ,[1] 操作对象还是 ary[4] ,指针移动量和 ary + 1 一样,(ary + 1)[1] == ary + 2 
*(ary+1)[1] // *(ary+1)[1] ==  *((ary+1)[1] ) ,[] 下标运算符 优先级高于 *取值, 先移指针 (ary + 1) ,[1]移动地址为 ary[4] ,再取整型值, 得8
(*(ary + 1))[1]  // (*(ary + 1)) 从二级指针变为指向整型指针, 移到第二数组,取第二个值, 得5 
guo1yang 2012-11-17
  • 打赏
  • 举报
回复
ary[3][4]和*ary[4]一个性质 ary+1等价于ary[1]为一个地址 *(ary + 1)[1]等价于ary+1+1即a[2]取值为8 (*(ary + 1))[1]等价于a[1][1]为5

69,371

社区成员

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

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