计算机二级 有些题没看明白

8.有以下程序: D. 将字符串s接续到字符串t中

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

若用键盘输入: abc def <回车>, 则输出结果是( )。
A. def def B. abc def C. abcd D. dd

正确答案 选A 不理解

  1. 若有以下定义和语句:
#include <stdio. h>
int a =4,b=3,*p, * q, *w;
p=&a;q= &b;w=q;q =NULL;

则以下选项中错误的语句是( )。
A. * q=0; B. w=p; C. * p=a; D.p= w;
正确答案 选 A 不理解 解析是因为 q =NUll *q=0 就错了

第一个 选 A 因为 p 和 q 指向同一个分配的内存空间,第一次输入p和q指向的内存空间 被赋值 abc,第二次输入又被赋值 def,最终输出 defdef
第二个选A 因为 q 指向了 b, q存储的是 b的地址, 而 q 又被赋值 NULL,也就是 q 指向了未知的区域, *q的访问就是非法的,所以它是错误的