我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 指针 >

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

归档日期:07-05       文本归类:指针      文章编辑:爱尚语录

  type*p时,系统不是给p分配了type大小的空间吗?为什么都说这个空间不能用呢?我自己测试的结果,double*p,发现sizeof(*p)确实是8字节大小,而且也可以*p=5这样赋值,这样用不对吗?...

  type * p时,系统不是给p分配了type大小的空间吗?为什么都说这个空间不能用呢?

  我自己测试的结果,double * p, 发现sizeof(*p)确实是8字节大小,而且也可以*p=5这样赋值,这样用不对吗?展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部你需要分清“指针所占用的内存空间”和“指针指向的内存空间”之间的区别。指针变量需要存储它所指向的内存地址,涉及到存储就需要空间,例如在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指向这片内存空间,就可以像其中写入数据了。

  展开全部double *p中p变量中存储的是内存地址值,这个地址值是8个字节;

  malloc是将运行栈中一块未经使用的空间的首地址返回,并将这个空间标记为已用,你对这个空间内容的操作都是通过这个首地址进行的,首地址的数值对应于你的例子中p的内容;

  double *p=5或者p=5,是人为指定内存地址值5,在不清楚5这个地址下的内存空间中存储的内容是什么或有什么作用的情况下,就对这个空间进行操作是逻辑错误,多数情况会导致程序崩溃。

  展开全部type * p;这句话是分配了一个变量p,这个变量可以保存地址,这个地址是一个type类型的存储单元,分配给p的是一个指针类型的存储单元,比如通常是一个unsigned int类型的单元用于存放地址;并且其中的内容没有被初始化,也就是地址不明,p在此时无法直接使用。

  double a; //自定义一个double类型存储单元,其别名为a,地址未知

  double *p; //自定义一个指针变量p,可以用于指向double型的存储单元

  p= //让系统计算变量a的地址赋值给变量p,则可以操作p指向的单元,也就是a变量的单元了

  //p本身是一个变量,指针类型的变量,其值是一个整数,是用来存放虚拟地址的。

  //sizeof操作符是针对类型求占用字节数,因p是double*类型,

  //修改p的指向,malloc在堆内存上申请了8字节,并把首地址赋给了q,

本文链接:http://masterblue.net/zhizhen/272.html