main(){ char *p,*q; p=(char*)malloc(sizeof(char)*20);q=p; scanf("%s%s",p,q);printf("%s%s",p,q); }但用vc6.0试后,答案为defdef,不信你试,

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 04:11:24
main(){ char *p,*q; p=(char*)malloc(sizeof(char)*20);q=p; scanf(

main(){ char *p,*q; p=(char*)malloc(sizeof(char)*20);q=p; scanf("%s%s",p,q);printf("%s%s",p,q); }但用vc6.0试后,答案为defdef,不信你试,
main(){ char *p,*q; p=(char*)malloc(sizeof(char)*20);q=p; scanf("%s%s",p,q);printf("%s%s",p,q); }
但用vc6.0试后,答案为defdef,不信你试,

main(){ char *p,*q; p=(char*)malloc(sizeof(char)*20);q=p; scanf("%s%s",p,q);printf("%s%s",p,q); }但用vc6.0试后,答案为defdef,不信你试,
如果:
输入: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