c语言中指针的用法以及注意的地方

1.定义指针变量时,必须将指针变量初始化为NULL(为空),否则,指针变量会由于初始化位置的不确定而变成野指针;(其实遵循引用变量之前,变量必须初始化这条规则就很好理解)

  例子:

int *p;
p=NULL;或者 int *p=NULL;
就是说 定义指针变量,如果不赋给它地址,系统会随机给它分配一个地址。
野指针会造成一些意想不到的结果,如果引用了,还可能造成系统崩溃。所以c里面明确规定不能出现野指针。

int *p;
int a=10;
int b=a+*p;
如果你没有将p设为null,那么如果编译器又没有报错的情况下,你会得到b的值,可能每次都会有不同,你往回找很难发现错误

定义但是不赋值的指针叫做野指针。野指针指向不明,对程序有不可知的后果,引用了更是出大问题,所以,c语言严格反对野指针。

因为程序在执行的时候,为变量分配内存空间,如果没有给变量分配初始值的话,那么变量空间中的值,是一个以前使用过的垃圾值(即无用的),你不知道它是什么,特别是指针变量,如果不赋初值,就使用的话,可能导致内存崩溃.
其实指针也是变量,并不必须在初始化时赋值为NULL。只需要在你使用该指针变量的时候确定这个变量有一个明确的值,也就是地址。但为了养成良好的变成习惯,最好在定义变量的时候初始化
NULL也是一个地址(0),不指定地址就随机给你一个。

int a;  //打印a的值,会输出一个不确定的值,
int *p;//跟a是一样的道理,这时的p指向的地址是你所不知道的一个地址。
2.分配指针
   1)int *p=NULL;//防止出现野指针
	int a=5;
	 p=&a;
   2) int *p=NULL;
	p=(int *)malloc(sizeof(int)*100);//注意,malloc 函数返回的是 void * 类型,所以需要强制类型转换
if(P==NULL){
printf(“malloc mem fail \n”);
goto XX;
}
......
free(p);//释放掉了指针所指向的那一段内存空间,使其变成“垃圾”内存(不可用内存)
if(p!=NULL)
	p=NULL;//防止出现野指针
....
	
  
  
int *p=NULL;
     *p=9;
试了一下发生了段错误,这个如何理解?
提问者评价
不错!,当上面的p=NULL后以后还用的时候还可以使用p吗?    ??
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值