//下面的程序演示了指针没有被人为手动分配存储空间的错误
#include
int main()
{
int * p;
int i = 5;
*p = i;
printf("*p=%d\n", *p);
return 0;
}
指针变量一开始没有在程序中控制去分配内存单元,会导致,编译器自动分配一个临时的内存单元给p,
这个内存单元是不被控制的,当执行到*p = i;的时候,这个临时的内存单元中的值被改成了5,这是有很大
风险的,这个零时的内存单元中的值有可能是另外一个很重要的程序要使用,结果让你给改了,你还不知道
你改了什么地方的值。
VC6.0下编译这个程序会有警告,执行后会卡死。现在明白了吧,自己写的程序似乎编译没问题,但运行卡死了,
大多数情况下,这个C程序可能写的的很大问题。
编译器自动分配给变量的零时值称之为垃圾值,如果给一个指针变量一个垃圾值,不再给指针变量重新赋予新地址,
很可能就变成, 胡乱的指向不受控制的内存单元,不受控制改掉了内存单元中的值,写程序的人还没察觉到,
这是极其危险的。
//下面的程序演示了*q相当与整型变量,而p是整型指针变量,整型指针变量赋给整型变量
#include
int main()
{
int i = 5;
int * p;
int * q;
p = &i;
*q = p;
printf("*q=%d\n", *q);
return 0;
}编译时后程序会报错covert from int * to int