一道简单的程序段,大家帮忙看看

来源:百度知道 编辑:UC知道 时间:2024/06/02 10:25:38
请选出正确的程序段:
A\int *p;scanf("%d",p);
b\int *s,k;*s=100;
c\int *s,k;char *p,c;s=&k;p=&c;*p='a';
d\int *s,k;char *p,c;s=&k;p=&c;s=p;*s=1;
正确答案是C,但是D错误出在什么地方?请大家分析一下

s 和 p 一个是整型指针 一个是Char型指针,

整型指针指向的地址 是一个4字节的内存空间的首地址
Char指针指向的地址 是一个1字节的内存空间的首地址

s=p 后 再 *s=1 会导致内存超范围操作
因为p指向的地址只分配了一个字节的空间,但 *s=1 会导致向该地址后的4个字节填充内容

两个结果 一个是报错 一个是 *p = '\0' 而不是 '1'

s=p
一个是int* 一个是char* 不能这么赋值

s 和 p 一个是整型指针 一个是Char型指针,

类型不匹配啊