当前位置: 代码迷 >> C语言 >> [讨论]啷个回事?
  详细解决方案

[讨论]啷个回事?

热度:229   发布时间:2007-11-07 22:02:25.0
还有一个问题:
main()
{ int t[3][2],*pt[3],k;
for (k=0;k<3;k++)
pt[k]=t[k];
}
哪个能正确表示t数组元素地址的表达式 :A: &t[3][2] B: *(pt+1)
为什么?
----------------解决方案--------------------------------------------------------

当然是B了

内存中并不存在元素 t[3][2],因此 &t[3][2]当然是错的。若写成 &t[0][0],&t[0][1],&t[1][0],&t[1][1],&t[2][0],&t[2][1]都可以


*pt[3]是一个指针数组,
for循环完成后
pt[0]指向t[3][2]数组的第一行, pt[1]则指向第二行, pt[2]指向第三行
即 pt[0]的值为数组第一行的首地址,即第一行第一个元素的地址
pt[1]的值为数组第二行的首地址,即第一行第二个元素的地址
pt[2]的值为数组第三行的首地址,即第一行第三个元素的地址
而pt[0]也可以写成*pt
pt[1]也可以写成*(pt+1);
pt[2]也可以写成*(pt+2);


----------------解决方案--------------------------------------------------------
学习中......
----------------解决方案--------------------------------------------------------
       有点 荤
----------------解决方案--------------------------------------------------------

感觉这里说的有点问题: pt[1]的值为数组第二行的首地址,即第一行第二个元素的地址
pt[2]的值为数组第三行的首地址,即第一行第三个元素的地址


----------------解决方案--------------------------------------------------------
回25楼:

笔误笔误
因为我图省事,所以用的是复制粘贴

正确的说法应该是:

即 pt[0]的值为数组第一行的首地址,即第一行第一个元素的地址
pt[1]的值为数组第二行的首地址,即第二行第一个元素的地址
pt[2]的值为数组第三行的首地址,即第三行第一个元素的地址

谢25楼的敏锐观察。

[此贴子已经被作者于2007-11-9 9:26:40编辑过]


----------------解决方案--------------------------------------------------------
  相关解决方案