一道有趣的题?

cqgaoke 2006-10-26 06:11:04
void foo(int [][3] );



main()

{

int a [3][3]= { { 1,2,3} , { 4,5,6},{7,8,9}};

foo(a);

printf("%d" , a[2][1]);
getch();

}
void foo( int b[3][3])

{

b++ ;
b[1][1] =9;

}

等于多少?为什么?
...全文
422 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
w50698942 2006-10-28
  • 打赏
  • 举报
回复
学习中
skukustar 2006-10-28
  • 打赏
  • 举报
回复
知道了..
值得学习
zjc_love 2006-10-28
  • 打赏
  • 举报
回复
jixingzhong(瞌睡虫:选择了远方,只有风雨兼程!)
b 是数组指针,
明白么?

b++ 是行增加1,
它指向了下一行,
那么从当前的 b 位置开始, b[1][1] =9; 也是指向了下一行,
(原来是b=a, a[1][1] =9; 后来是b=a+1, a[2][1] =9;)

_____________________________________
9494
swimmer2000 2006-10-28
  • 打赏
  • 举报
回复
学习学习.
xjx19 2006-10-27
  • 打赏
  • 举报
回复
数组作参数时退化为指针,
学习了
dreamzone 2006-10-27
  • 打赏
  • 举报
回复
答案是9
失望中......-^-
wang430903 2006-10-27
  • 打赏
  • 举报
回复
受教育
sirguan 2006-10-27
  • 打赏
  • 举报
回复
同意一楼的
dodo4444 2006-10-27
  • 打赏
  • 举报
回复
不错 顶了
鄢老 2006-10-27
  • 打赏
  • 举报
回复
Jokar(贪睡鼠★御姐控☆小宠王)说得很对,
b++后相当与b=&a[1][0]
jixingzhong 2006-10-26
  • 打赏
  • 举报
回复
b 是数组指针,
明白么?

b++ 是行增加1,
它指向了下一行,
那么从当前的 b 位置开始, b[1][1] =9; 也是指向了下一行,
(原来是b=a, a[1][1] =9; 后来是b=a+1, a[2][1] =9;)
Jokar 2006-10-26
  • 打赏
  • 举报
回复
PS:没记错的话你应该教导过别人“数组退化成指针”的问题啊 :P
----------------
呵呵,谁都有犯错的时候 :)
Jokar 2006-10-26
  • 打赏
  • 举报
回复
捏捏偶家 健健 :)
Jokar 2006-10-26
  • 打赏
  • 举报
回复
to 健健;

数组作参数时 退化为指针了
blue_zyb 2006-10-26
  • 打赏
  • 举报
回复
lj860603(键键):

一维数组作参数,如void fun(int a[3])中的a退化为指针int*
而为数组作参数,如void fun(int a[3][3])中的a退化为指针 int (*)[3]

PS:没记错的话你应该教导过别人“数组退化成指针”的问题啊 :P
Jokar 2006-10-26
  • 打赏
  • 举报
回复
等于多少?
----------
9

?为什么?
--------------
void foo( int b[3][3])
b是行指针,指向一个一维数组(注意不是指向数组元素,而是整个数组)

初始状态:
b --------〉 1 2 3
4 5 6
7 8 9

b++后
1 2 3
b---------〉 4 5 6
7 8 9

经过下标运算 b[1][1] = *(*(b+1)+1) ,*(b+1)+1 指向的是 8也就是元素a[2][1]对应的空间,经过 b[1][1] =9; 修改之后 a[2][1] 空间的元素值变为 9;所以最终输出为9
cqgaoke 2006-10-26
  • 打赏
  • 举报
回复
没错呀.
lj860603 2006-10-26
  • 打赏
  • 举报
回复
blue_zyb() ,那 b++ 这句呢?
lj860603 2006-10-26
  • 打赏
  • 举报
回复
不是很有趣, b++应该是错误的 ,数组名是一个“常量指针”,它指向的方向是不可以改变的。
blue_zyb 2006-10-26
  • 打赏
  • 举报
回复
我还以为多有趣呢,有点失望。。。

输出: 9
原因:因为foo里面b[1][1] =9;把a[2][1]改成9了

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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