一道简单的程序段,大家帮忙看看
来源:百度知道 编辑: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错误出在什么地方?请大家分析一下
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型指针,
类型不匹配啊