C语言高手 请告诉我几道简单的题! 我想搞明白 谢谢

17. 若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是_______.
int t[3][3], *pt[3], k;
for (k=0;k<3;k++) pt[k]=&t[k][0];

A. t[2][0]
B. t[2][2]
C. t[l][2]
D. t[2][l]

答案是C 但是我没明白

还有
11. 以下程序执行后sum的值是__________
main()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf(“%d\n”,sum);
}

A. 15
B. 14
C. 不确定
D. 0

为什么答案是C 求指导
19. 以下程序的输出结果是____________.
int d=1;
fun(int p)
{ static int d=5;
d+=p;
printf("%d ",d);
return(d);}
main( )
{ int a=3; printf("%d \n",fun(a+fun(d)));}

A. 6 9 9
B. 6 6 9
C. 6 15 15
D. 6 6 15

这道呢

1 . 首先我们定义的是一个指针数组,pt[3] 它和数组类似,数组名表示的是第一个字符,而指针名则表示第一个指针,所以pt应该是pt[0],而pt[0]对应的是t[0][]
在 *(*(pt+l)+2) 中 先看pt+l 对于数组来说,每一行的内存是连续分配的, 所以pt+l就是pt当前这一行的下一行,即t[1][]
而 *(pt+l)+2 就是指向pt+1这一行的第三个字符 也就是t[1][2] 所以*(*(pt+l)+2) 就是指向t[1][2] 内容的

PS:for 循环中执行的意思就是: pt[0]→ a,b,c
pt[1]→ e,f,g
pt[2]→ h ,i, j
而pt对应的其实就是pt[0]所以 pt+1 =pt[1]
2.定义sum的时候 由于没有对sum进行初始化,所以编译器会对sum进行随机赋值,所以sum将会被分配到一个随机数,而在求和的时候累加之后的和当然不确定

3.C
第一次调用fun函数的时候,fun(a+fun(d)) 应该是在进入参数(a+fun(d)) 的时候遇到fun(d)
这时,由于还没有执行static int d=5 所以 ,传递进去的参数p(也就是d)依然为1 ,然后再执行 d+=p;
这时输出的d就等于6
之后再执行fun(a+fun(d)) 要再进入外层的fun函数 这时参数p就等于a+fun(d) 也就是9
这时候d是等于6的,所以d+=p之后就等于15了,所以,输出了15
然后返回值是d所以也是15
所以最后结果就是6 15 15
PS.需要说明的是static int d=5 这里d被声明为一个静态变量,那么也就是说在编译的时候d这个变量已经被分配好内存,那么重复执行fun()函数的时候,这个d变量是不会被重复定义的,
也就是说,当第二次执行fun函数的时候static int d =5 这一句是不用被执行的
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-21
第一个题,t是一个数组,pt是一个指针数组,做完循环后,指针数组就指向了t这个数组了。即pt和t应该是一个内容,只不过t是const的。*(pt+1)就是t[1],*(*(pt+l)+2)就是t[1][2]了。
第二个题,sum没有初始化,所以答案就选c了。记住一点哦,永远不要使用未初始化的变量!
第三个题,选c,关键是那个static int d,这个地址分配以后,里面的内容直到程序执行结束才释放,这是变量生存期的问题了。

最后多说一句,这些题,最好是自己动手敲到编译器里面执行一下,然后,用调试的功能,观察各变量的变化,这样理解起来会比较容易。本回答被提问者采纳
第2个回答  2012-04-21
呵呵 ,很高兴啊,我刚学完C语言。我看看啊
一:
int t[3][3], *pt[3], k;
for (k=0;k<3;k++) pt[k]=&t[k][0];
其中 *pt[3] :pt是指向一个有四个元素的一维数组
&t[k][0];//是第k行的地址
我们在来分析下执行过程:

for (k=0;k<3;k++) pt[k]=&t[k][0];
第一次 循环:pt[0] = &t[0][0]//把首地址赋给pt; ,*(*(pt+l)+2) 等价于:t[l][2] <因为*(pt+l) 等价于 t[l] ,所以就是t[l]+2 ,再加个* ,就是t[l][2]了
第二次循环:pt[1] = &t[1][0] ........................................(结果一样,,*(*(pt+l)+2) 结果为t[l][2] )
二:
main()
{ int i , sum;
for(i=1;i<6;i++) sum+=i;
printf(“%d\n”,sum);
}
sum 的值 没有初始化,所以他的值 是不可预料的、~
和sum进行运算的后值 肯定也是是不可预料的 哈

要采纳呐~
同学 , 还有什么不懂么?
第3个回答  2012-04-21
17.C *(pt+1)== t[1][0]; *(*(pt+1)+2) = t[1][2]

11.其实一般的编译器答案会是A,但是int sum;是没有初始值的,他得默认值是不是0要根据编译器的情况来决定,所以说是不确定
第4个回答  2012-04-21
17 c *(pt+1)指向的是t【1】【0】再加上2就是了

11 c 题是不确定的,因为初始值是随机的,不确定的