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

文章解释了指针占用的内存空间与指针指向的内存空间的区别,指出现指针变量在64位系统中通常占用8字节。sizeof运算符在编译时计算结果,例如对于double指针,sizeof(*p)等于sizeof(double)。直接给未初始化的指针赋值是未定义行为,而malloc用于动态分配内存,使指针可以安全地指向并写入数据。
摘要由CSDN通过智能技术生成

你需要分清“指针所占用的内存空间”和“指针指向的内存空间”之间的区别。指针变量需要存储它所指向的内存地址,涉及到存储就需要空间,例如在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、付费专栏及课程。

余额充值