请详细解析此程序(给每一个语句注解)

来源:百度知道 编辑:UC知道 时间:2024/05/21 01:30:21
#include<stdlib.h>
void main()
{
char *p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf("%s%s",p,q);
printf("%s,%s\n",p,q);
free(p);
}

输入abc def 的结果是def def,不懂这是为什么?

p=(char*)malloc(sizeof(char)*20);
q=p;

从上面这两句可以看出,
p和q指向同一个地址,也就是malloc的那个空间的地址

所以scanf("%s%s",p,q)这一句虽然是给p,q都进行了赋值,
但是由于p和q指向同一个地址,所以最后的q的输入值其实已经将这块空间给覆盖了,也就是p的输入值其实是没有用的,会被最后的q的输入值给覆盖的

printf("%s,%s\n",p,q);
虽然这一句是进行p,q指向内容的分别输出,
但是由于p和q指向同一个地址,
所以输出的都是这个地址中的值,
也就是最后的q的输入值

所以输出的是:
def def