分析下面给出的代码,得到程序最终输出的结果。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p, *q;
p = (char*)malloc(sizeof(char) * 20);
q = p;
scanf("%s %s",p, q);
printf("%s %s\n",p, q);
return 0;
}
输入 abc def
请问输出的结果是什么?
def def
p 与 q 都是一个指针,指向的元素类型是 char 类型, p 指向在堆上动态开辟的20个 char 类型的空间,将 p 赋值给 q 。这样,p 和 q 都是指向那块动态开辟的空间,指向的为同一块内存空间。
在输入数据时,首先输入 adc ,这时 p 所指向的空间存储的数据就为 abc 。由于 q 与 p 指向同一块空间,q 此时指向的也是 abc 。 这时又给 q 赋值,将 def 输入给 q 。q = p ,def 这时就将 adc 给覆盖掉了。所以这个程序的输出结果为 def def。