int *P;声明一个指针,没有值。

 首先是错误代码:
#include  < stdio.h >

int   main() {
    
int *p;
    
*= 3;
    printf(
"p=%d ",*p);
    
return 3;

}



执行结果

[vserver@vserver test]$ gcc 
05 .c
[vserver@vserver test]$ .
/ a. out
p
= 3
Segmentation fault (core dumped)
[vserver@vserver test]$

分析:

int *p; /*定义一个用来存放int 变量地址的变量*/
int b;/*定义一个用来存放值的变量*/
p=&b;/*因为变量b申明后会在内中中分配一个地址,所以可以把这个地址赋给p
     就是在p变量的地址中写入b的地址值*/
*p=3;/*实际上是通过间接寻址找到b,把3写入b变量地址中*/

/*再来分析你的程序*/
int  main(){
    int *p;/*定一个用来存放地址的变量*/
    *p = 3;/*在没有给定地址的情况下,也就是不知道地址在哪却向其中写入数据3,这时肯      定会出现你说的错误,因为是试图改写任意地址里的内容,一般linux下p中      的初始值为内存首地址0,也就是操作系统内核地址区*/
    printf("p=%d/n",*p);
    return 3;

}

修改后程序:

 

int   main() {
    
int *p;
    p
=(int *)malloc(sizeof(int));
    
*p=5;
    printf(
"%d ",*p);
    free(p);
    
return 3;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值