指针定义不分配内存

#include 
#include  //分配内存时用到的头文件
void main()
{
     int a=20,*p;    //这里定义了一个整型指针,但没赋初值,这时我们叫这个指针为野指针
     printf("%d->%p\n", a, p);   //观察%p是输出一个地址数据
     p=NULL;
     printf("%d->%p\n", a, p);
     p=&a; 
     printf("%d->%p:%d\n", a, p, *p);
     p=(int *)malloc(sizeof(int));
     printf("%d->%p:%d\n", a, p, *p);
     *p=30;
      printf("%d->%p:%d\n", a, p, *p);
}

认真观察这个程序及输出结果
如果只定义指针,没有初始化系统是不会给它分配内存的,初始化后,只是指向某个内存而已,没有初始化的指针是指向一个未知的内存地址,这样的指针是很危险的。一般我们定义一个指针变量就会给它初始化为空,以免造成的危险无法补救。
第11行就是给指针P分配内存了,这是C语言中的规定,没有为什么的。
分配内存之后它再也不指向a变量的内存地址,而是指向一个新的内存地址。
追问
为什么,只定义指针系统不会为它分配内存
回答
这是C语言规定的,没有为什么
你可以想一下,如果我定义的指针是用来指向一个已分配好内存的变量或一个结构体(结构体大小由结构体成员决定,如果成员越多,结构体占内存越大)。如果定义指针时又分配一个内存,这样就不会用到定义指针时分配的内存,这样就存在一个内存的浪费,如果指针类型为一个结构体指针时,这个内存就会很大,如果分配了却用不着,那不是很浪费吗。
为了避免这些内存的浪费,所以在定义指针变量时不分配内存。
如果你学过单片机,你就可以知道,一个16位C51单片机的内存1M都不到,那么内存你如何去分配才最省。如果定义指针时同时分配内存,那么在单片机上用指针,那样单片机的内存就会不够 用,如果不用指针效率就不高!这就是问题。有很多为了省内存还用到了位段存储,就如一个整型变量,我用不着4个字节(1个字节=8位),我才用了12位,那我就只用这4个字节里的12位,后面的20位用来存储其他数据。
爱好学习是没错的,但是,也不要太深入的研究,这样你会浪费更多的时间,等你学到精通了你想怎么深入研究都没问题,因为现在就深入去研究这些,有些知识又没到位,这样很浪费时间的。努力学习吧,加油!
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值