若有如下程序: 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() {

admin2010-01-10  24

问题 若有如下程序:    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、程序错误

答案2

解析 本题定义了一个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。
转载请注明原文地址:https://jikaoti.com/ti/gqI0FFFM
0

最新回复(0)