C语言指针使用时初始化的常见错误,如何进行初始化?

  • 常见错误一

#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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值