注册 登录
编程论坛 C++教室

指针内存的分配问题

乔峰不会 发布于 2009-10-23 10:24, 1011 次点击
我想问一下
  int *p;  //此时系统已经为p分配了四个字节的内存空间,因为它是一个int *型的变量,但是它保存的是一个地址呀,那么此时系统有没有给它分配一段地址让 p 这个int *型变量来保存啊?
  如果有,那么这段地址是固定的吗,是什么?当我在继续写
  p = new int ;时,我感觉系统一定为p 分配了一段地址让它保存,那么先前所分配的地址(如果有的话)系统怎么处理了?
8 回复
#2
debroa7232009-10-23 18:35
&p不就可以看到变量p的地址,比较它的值和p值有什么不同
cout<<&p<<p<<*p;
p = new int ;这句话就是让系统分配一个int类型的内存空间,将该空间的地址值存入到变量p所在的内存地址里
#3
gz812009-10-24 09:46
以下是引用乔峰不会在2009-10-23 10:24:55的发言:

我想问一下
  int *p;  //此时系统已经为p分配了四个字节的内存空间,因为它是一个int *型的变量,但是它保存的是一个地址呀,那么此时系统有没有给它分配一段地址让 p 这个int *型变量来保存啊?
  如果有,那么这 ...
分配了四个字节(32位机)的地址保存指针变量。

p = new int ; 那么先前所分配的地址(如果有的话)系统怎么处理了?会用新的地址值覆盖原有的。就跟int i=m;一样。
#4
mos62009-10-24 10:27
回复 2楼 debroa723
输出如cout<<*p<<"   "<<p<<"   "<<&p,
只有本站会员才能查看附件,请 登录
得到的一个值,地址,最后那个是什么,还别的什么
#5
乔峰不会2009-10-24 13:21
回复 2楼 debroa723
2 楼,我采用了你的方法,
  double *p;
  cout<<p<<endl;
  cout<<&p<<endl;
  cout<<*p<<endl;//如果有此句,就不能输出任何东西。
编译和执行时都没错,但是就是不能执行cout<<*p;如果删掉此句就能执行了。
 是不是在double *p ;后,系统已经为p分配了8个字节(double类型)的空间让p指向,但是此时这个内存地址上没有任何东西,所以不能read呀??


如果我执行下面语句时,
   p= new double;
   cout<<p<<endl<<*p<<endl<<&p<<endl;
就能执行了,此时是不是系统已经为*p随机分配了一个数呀??
#6
heryanlong2009-10-24 17:02
int * p;在系统初始化p指针时,也是给他分配了一个地址。你可以定义一个二级指针如**pp;然后将p的地址赋给二级指针:pp=&p;你可以运行一下系统,查看一下*pp的值.
#7
heryanlong2009-10-24 17:04
回复 4楼 mos6
你在执行cout <<*p;时,没有为这个指针初始化,编译器当然报错啦!
#8
东西邪毒2009-10-24 21:18
int p;系统分配一个地址来存储p,;这个地址值存放在一个空间中,p值随机;
同样,int *p;系统分配一个地址来存储p,这个地址值存放在一个空间中,p值随机,只不过这里的p是一个指向整形数的指针
当 p = new int时,系统new一个空间,这个空间的地址赋给p,这样p就被初始化了
#9
supermat2009-10-27 21:34
先前的地址被覆盖了
1