问题 单项选择题

若有如下程序:
sub(int *t,int a[3][4])
int m,n;
for(m=0;m<3;m++)
for(n=0;n<4;n++)
*t=a[m][n];t++;
main()
int*t,s[3][4)=1,2,3),4,5,6),7,8,9;
t=(int*)malloc(50);
sub(t,s);
printf("%d,%d\n",t[4],t[7]);

则程序运行后的输出结果是( )。

A.4,7

B.4,0

C.5,8

D.程序错误

答案

参考答案:B

解析: 本题定义了一个sub()函数,其作用为将一个二维数组按行复制到t所指的连续内存空间内。主程序中首先使用malloc()函数为t申请了50个字节的内存空间,然后调用sub()函数,将二维数组s的内容复制到t申请的内存空间内,最后输出t的第5个元素(t[4])和第8个元素(t[7]),即为3行4列二维数组中的s[1][0]和s[1][3]。s[1][0]是初始化列表中第二个大括号中的第一个值 4,而s[1][3]应该是初始化列表中第二个大括号中的第4个值,但没有这么多初始值,C语言在这种情况下会自动将该元素设置为0,即s[3][4]={{1,2,3},{4,5,6}, {7,8,9}}等价于s[3][4]={{1,2,3,0}, {4,5,6,0),{7,8,9,0}}。所以最后输出结果是4,0,应该选择B。

单项选择题
单项选择题