题目---char*p,*q;p=(char*)malloc(sizeof(char)*20);q=p;scanf("%s %s",p,q);printf("%s %s\n",p,q);

分析下面给出的代码,得到程序最终输出的结果。

#include 
#include 
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。

你可能感兴趣的:(题目)