C编程: 为什么指针一定要malloc分配空间?

你需要分清“指针所占用的内存空间”和“指针指向的内存空间”之间的区别。指针变量需要存储它所指向的内存地址,涉及到存储就需要空间,例如在64位程序中,任何一个指针变量都占用64位即8字节的内存空间。而指针所指向的内存空间,指的是根据指针变量中存储的内存地址寻址到对应位置的内存空间。这就好比房间和门牌号的关系,门牌号需要写在一个牌子上,这个牌子就是指针变量所占用的内存空间,而房间本身则是指针变量指向的内存空间。
第二,sizeof关键字的结果是在编译期就计算好的,对于double类型的指针p来说,sizeof(*p)就是sizeof(double),而double类型占用8个字节,这是在编译时就确定的,和p具体指向哪里是完全没有关系的,也就是说在这个程序执行之前,sizeof(p)就已经确定是8。
“可以
p=5这样赋值”,这是不可能的,原因很简单,double *p只是定义了一个指针变量p,此时变量p中的内容也就是p所指向的地址是完全不可预知的,此时向p所指向的内存空间直接写入数据,是未定义行为,结果是不可预知的,程序很有可能因此崩溃。而malloc的作用,就是向操作系统申请一块可用的内存空间,再令p指向这片内存空间,就可以像其中写入数据了。

转载:https://zhidao.baidu.com/question/1453020791411722980.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值