一道关于C语言题目的讲解【转自百度知道】 - 右手博客 一道关于C语言题目的讲解【转自百度知道】 - 右手博客

一道关于C语言题目的讲解【转自百度知道】

#include <stdio.h>
#include <stdlib.h>
void main()
{
 char*p,*q;
 p=(char*)malloc(sizeof(char)*20);
 q=p;
 scanf("%s%s",q,p);
 printf("%s%s\n",q,p);
}


如果:
输入:abc def(回车)
输出:defdef
而不是楼上说的abcdef
因为 
p=(char*)malloc(sizeof(char)*20);    //为p创建堆内存
q=p;                                 //将p创建的堆内存赋值给q
                                     //也就是说,p,q是指向相同的内存
所以说,
输入:abc def(回车)           //实质是先把abc输入p指向的内存,再把
                              //def输入q指向的内存
                               //由于q,p所指向的内存是同一内存
                              //所以,值def覆盖了值abc
因而,内存中只有值def
在输出时,先输出p,再输出q,所以输出def后再输出def

故:
如果:
输入:abc def(回车)
输出:defdef

评论 0

挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论