总结日常学习和编程中的c语言知识点
目录
1、结构体成员变量中有int型指针时
1、结构体成员变量中有int型指针时
#include <stdio.h>
#include <stdlib.h>
struct ele1{
int * pn;
}t1;
struct ele2{
int n;
}t2;
struct ele3{
int * pn;
}t3;
int main(void) {
printf("%u,%u,%u\n",sizeof t1.pn,sizeof t2.n,sizeof t3.pn);
t3.pn=(int *)malloc(sizeof(int));//应该使用这种方式为指针变量开辟新空间
scanf("%d %d %d",&t1.pn,&t2.n,t3.pn);//注意t1.pn的赋值方式
printf("%d,%d,%d\n",t1.pn,t2.n,*t3.pn);//注意t1.pn的输出方式
int num=999;
t1.pn=#t2.n=num;t3.pn=#
printf("%d,%d,%d\n",*t1.pn,t2.n,*t3.pn);
return 0;
}
将t1中int型指针的内存中本应该存储的int型变量的地址,改为了存储一个常量值。其实程序并没有为t1的int型指针开辟新的内存空间,而是直接将存储指针的内存空间用来存储常量。即为野指针t1.pn赋予了一个常量(该常量让计算机以为是一个内存地址),所有如果读取*t1.pn操作系统会报错(访问非法内存空间)。实际开发这么玩就等着死吧。
|