为什么值不同呢?//从C#到初学C++

myhotmail123 2010-04-25 09:57:45

//从C#到初学C++
int *x=new int;
cout<<"x: "<<x<<endl;//这是什么值 ?
cout<<"*x: "<<*x<<endl;//这是指针指向的值,按应于上面的x的值相同呀,为什么不同了呢??
cout<<"&x: "<<&x<<endl;//这是指的内存地址
cout<<"new int后 :"<<endl;
...全文
112 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
myhotmail123 2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tonywya 的回复:]

1.存在指针变量x中(new出来的空间)的地址
2.*x中,*是取内容符,应该是取出指针变量x所指向的空间中存放的内容,但是这里你没有给它赋初值,也就是说这个空间中什么都没有,你还要取内容是不对的。
3. 取x的地址
[/Quote]

对于2,我取出了值了呀
tonywya 2010-04-26
  • 打赏
  • 举报
回复
对于2取出的值是不受控制的呀,

打个不恰当的比方:有人帐号里明明知道没钱,可由于取款机的问题取出了几十万,可那还是非法的,要判刑
Beyond_cn 2010-04-26
  • 打赏
  • 举报
回复
第二个中,你没有初始化*x的值,取到的值是X现在所指向的内存中本来存在的数据。。
Beyond_cn 2010-04-26
  • 打赏
  • 举报
回复
感觉你这更像是c#啊。。
2010-04-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 myhotmail123 的回复:]
对于2,我取出了值了呀
[/Quote]
C++ 不负责给基本类型初始化一个默认值。
所以你需要

int *x = new int(0);
cout<<"x: "<<x<<endl; //输出的是指针变量x的值,new 分配的内存空间的地址
cout<<"*x: "<<*x<<endl; //指针变量指向的值,new 分配的内存空间的值
cout<<"&x: "<<&x<<endl; //指针变量x的内存地址
delete x; //记住自己回收,C++ 没有 GC

new 单个 int 似乎是一种很无聊的行为……
tonywya 2010-04-25
  • 打赏
  • 举报
回复
1.存在指针变量x中(new出来的空间)的地址
2.*x中,*是取内容符,应该是取出指针变量x所指向的空间中存放的内容,但是这里你没有给它赋初值,也就是说这个空间中什么都没有,你还要取内容是不对的。
3. 取x的地址
ForestDB 2010-04-25
  • 打赏
  • 举报
回复
帮顶。
mstlq 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 myhotmail123 的回复:]
引用 2 楼 fox000002 的回复:

lz 需要先把 C# 忘了

C++ 里的堆内存需要自己管理,没有 GC,new 后需要自己 delete

一般的写法是

C/C++ code
int x;



C/C++ code
int *x=new int;
cout<<"x: "<<x<<endl; // 输出的是指针变量x的值
cout<<"*x: "<……
[/Quote]
门牌号码和房子不是一回事……
所以x和*x不是一回事
jackyjkchen 2010-04-25
  • 打赏
  • 举报
回复
指针是个地址,和指针指向的值不同
myhotmail123 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fox000002 的回复:]

lz 需要先把 C# 忘了

C++ 里的堆内存需要自己管理,没有 GC,new 后需要自己 delete

一般的写法是

C/C++ code
int x;



C/C++ code
int *x=new int;
cout<<"x: "<<x<<endl; // 输出的是指针变量x的值
cout<<"*x: "<<*x<<……
[/Quote]

x是指针指向的值吗?*x也就是指针指向的值吧?按理应是一样的呀
fox000002 2010-04-25
  • 打赏
  • 举报
回复
lz 需要先把 C# 忘了

C++ 里的堆内存需要自己管理,没有 GC,new 后需要自己 delete

一般的写法是

int x;



    int *x=new int;
cout<<"x: "<<x<<endl; // 输出的是指针变量x的值
cout<<"*x: "<<*x<<endl; // 指针变量指向的值,new 分配的内存空间的值
cout<<"&x: "<<&x<<endl; //指针变量x的内存地址
cout<<"new int后 :"<<endl

jackyjkchen 2010-04-25
  • 打赏
  • 举报
回复
按顺序
1.指针x的地址,C#里一般看不到……

2.x这个地址上存的内容,*是解引用,因为你没有初始化,debug下0xcdcdcdcd,release下不定

3.这个是存“x地址(也是个数哦)”的地址

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧