用&取地址时,为什么可以对诸如"Hello"的字符串常量使用,却不能对#define PI 3.1415926的浮点型常量使用?

Asskicker_Ryan 2014-11-30 02:10:50
RT
例如
&"Hello"是合法的,而 &PI 则不行?
...全文
451 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
luotuo44 2014-12-01
  • 打赏
  • 举报
回复
"Hello"占用了内存,所以有内存地址。而仅仅是一个值的话,是不占用内存的。没有占用内存,当然就没有内存地址可言。 如果是const double PI = 3.1415925;那么PI就是一个变量,需要占用内存,此时就有地址可言了。
赵4老师 2014-12-01
  • 打赏
  • 举报
回复
编译期 运行期
「已注销」 2014-12-01
  • 打赏
  • 举报
回复
#4一语道破
ZG 2014-12-01
  • 打赏
  • 举报
回复
分配了实实在在的内存,才能取到地址, #define PI 3.14.... 在预处理阶段PI就直接被替换成3.14..了,程序是看不到PI的,它所知道的就是3.14...这个常量数字 const double PI = 3.1415925,PI是一个变量,double型的,编译器为其分配了空间,只不过由于有const修饰这个空间只读 hello,字符串常量,编译器为其在文字常区分配空间,同样只可读 想要完全了解,写一个简单的,然后反汇编
wang0635 2014-11-30
  • 打赏
  • 举报
回复
&PI 经过编译预处理后变成了 &3.1415925 而"Hello"是在内存中连续存放的
relaxisland 2014-11-30
  • 打赏
  • 举报
回复
因为 #define PI 3.1415926 不是常量,是宏定义 过了编译阶段,在程序运行阶段,是不存在的
Asskicker_Ryan 2014-11-30
  • 打赏
  • 举报
回复
引用 2 楼 zhouchongzxc 的回复:
这个很简单的吧 movl $10, %edx 你知道 10 会放在哪里吗?
小弟菜鸟请指教 movl $10, %edx是什么意思。。。看不懂
ChongQingJin28 2014-11-30
  • 打赏
  • 举报
回复
这个很简单的吧 movl $10, %edx 你知道 10 会放在哪里吗?
Asskicker_Ryan 2014-11-30
  • 打赏
  • 举报
回复
经过试验发现 用#define 定义的PI 不能使用&符号取地址, 而用const double PI = 3.1415925;就可以。请问是为什么呢?

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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