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

你可能感兴趣的:(c语言注意事项)