问题
问答题
有以下程序
main()
int a[3][2]=0,(*ptr)[2],i,i;
for(i=0; i<2; i++)
ptr=a+i; scanf("%d",ptr); ptr+++;
for(i=0;i<3;i++)
foil(j=0;j<2;j++) printf("%2d",a[i][j]);
printf("\n");
若运行时输入:1 2 3<回车>,则输出结果为
答案
参考答案:D
解析: 本题主要考查的是scanf()函数的输入原理。scanf()函数执行时,先从键盘缓冲区中读取用户输入的数据,若缓冲区为空或输入数据少于所需数据,则暂停程序等待用户的输入,直到用户敲入回车,scanf()将继续到键盘缓冲区中读取输入,如此反复直到满足scanf()函数所需数据,程序才继续执行下面的语句,而scanf()没有取完的数据仍然会保存在键盘缓冲区内,到程序结束时还没取完就会被释放掉,不会影响其他的程序运行。另外,scanf()函数将取到的数据匹配给第2个及其后面的指针参数所指的内存地址中去,而不检查该参数的类型是否匹配。所以在本题中考生不要被指针ptr的定义所迷惑,它所做的只不过是临时保存一下a+i的值,然后送到scanf()函数中去。题目首先定义了一个二维数组a[3][2]并用{0