*az=a;和az=&a;有区别么

yueyufei5 2011-01-27 03:28:32
int a=1;
int *az;

*az=a;

az=&a;

为什么输出az都一样
...全文
330 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Koptop 2011-01-28
  • 打赏
  • 举报
回复
正解啊 C Primer Plus 第五版 里面专门有讲解 这个问题的 楼主可以去看看[Quote=引用 1 楼 bluejays 的回复:]
*az=a; // 这个不修改指针az指向的位置,而是把这个位置的值改成a的值,也就是1
az=&a; // 这个直接把指针az指向了a所在的位置,所以*az的值就是a的值,也就是1

*az=a这种用法,在az未初始化的情况下是不对的,因为不知道az指向哪里。如果运行没出错,只能说LZ的RP太好了。
[/Quote]
luojc714 2011-01-28
  • 打赏
  • 举报
回复
一楼正解!
雪人2015 2011-01-27
  • 打赏
  • 举报
回复
LZ应该写清楚上下文。要不然你的代码是不能看的。
不能给“飘渺不定”的指针直接赋值啊。这是C++的大忌。
先确定指向后再赋值。
wy2001wy 2011-01-27
  • 打赏
  • 举报
回复
*az=a;
会正常运行?这编译器也太不靠谱了
harleypang 2011-01-27
  • 打赏
  • 举报
回复
int a=1;//定义一个整形变量a并赋值1;
int *az;//定义一个整形指针变量az;没初始化。

*az=a;//az指针变量所指向的内存赋值为a的值1;

az=&a;//az指针指向a变量;

为什么输出az都一样

==========================


欣客 2011-01-27
  • 打赏
  • 举报
回复
一楼正解,
问下楼主什么编译器,能运行成功 。。。
赵4老师 2011-01-27
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
yong_f 2011-01-27
  • 打赏
  • 举报
回复
int a=1;
int *az;
*az=a; //这样用的话,如果az没有指向一个具体的地址,或者说是一个正确的可用的地址,这样做是非常危险的。az指针指向一个不确定的地址。
az=&a; // 这个直接把指针az指向了a所在的位置,所以*az的值就是a的值,也就是1
多看看编译原理。
  • 打赏
  • 举报
回复
[Quote=引用楼主 yueyufei5 的回复:]
int a=1;
int *az;
*az=a;
az=&a;
[/Quote]
az是一个整数型指针,它的值是另一个整数的地址,az未初始化的情况下,它的值是不确定的,*az=a就是将一个不确定位置的内存的值赋值为a,如一楼所说,不出错是人品好,出了错就是"深度读取或者写入受保护的内存..."
az = &a,并未如楼上解释的是别名,而是取a的地址赋给ax,这时候ax的值确定了,就是a所在内存的地址

所谓别名:
int x = 4;
int &y =x;
y就是x的别名
不要看到取地址的操作符就想到别名
Defonds 2011-01-27
  • 打赏
  • 举报
回复
指针,引用
luciferisnotsatan 2011-01-27
  • 打赏
  • 举报
回复
一个是指针,一个是引用(别名)
sghdls 2011-01-27
  • 打赏
  • 举报
回复


1楼完全正确.

为了避免程序内存溢出, 指针一定要在定义时初始化.
jxwht005 2011-01-27
  • 打赏
  • 举报
回复
指针那个1楼已解释

引用那个就好象别名一样,你的大名和小名都是指你这个人,所以az、amp是一样的
JiangXiang 2011-01-27
  • 打赏
  • 举报
回复
恭喜楼主,您的野指针用地非常熟练!
nand库路泽 2011-01-27
  • 打赏
  • 举报
回复
在C++中是可以的!但是在C中好象没有引用的方式!!
muyu1990 2011-01-27
  • 打赏
  • 举报
回复
Zhhmily 2011-01-27
  • 打赏
  • 举报
回复
1楼正确
lancerEx 2011-01-27
  • 打赏
  • 举报
回复
额···感觉你还是要多翻翻书
jikeyuan1 2011-01-27
  • 打赏
  • 举报
回复
指针指向一个野指针是很危险的 这段代码会产生一个中断
dark_ice_rain 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bluejays 的回复:]
*az=a; // 这个不修改指针az指向的位置,而是把这个位置的值改成a的值,也就是1
az=&a; // 这个直接把指针az指向了a所在的位置,所以*az的值就是a的值,也就是1

*az=a这种用法,在az未初始化的情况下是不对的,因为不知道az指向哪里。如果运行没出错,只能说LZ的RP太好了。
[/Quote]这个学习了。。。
加载更多回复(2)

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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