-
常见错误一
#include "stdio.h"
int main(void)
{
int i=10;
int * p;
*p=i; //不允许
printf("%d",*p);
}
虽然可能编译不会报错,但是运行时会出错。原因是:上面程序中的p变量没有进行初始化,所以变量p里面存放的是一个上次遗留下来的垃圾值,故如果对以垃圾值内容为地址的变量进行修改是不允许的,如果能修改不是本程序中变量中的值的话,这样会造成系统奔溃。
-
常见错误二
#include "stdio.h"
int main(void)
{
int *p;
int *q;
int i=10;
p=&i;
//*q=p; //error 等号左右两边数据类型不一致,左边是
//*q=*p ; //error 和常见错误一的实质一样,没有对q进行初始化就赋值了
/**
p=q; //error q里面是垃圾值,p也变成垃圾值
printf("%d",*q); //和常见错误一一样 q的空间是属于本程序的,所以本程序可以读写q的内容
但是如果q内部是垃圾值,则本程序不能读写*的内容
因为*q所代表的内存单元的控制权限并没有分配给本程序
**/
q=p; //OK
printf("%d",*q);
}