社区
C语言
帖子详情
用&取地址时,为什么可以对诸如"Hello"的字符串常量使用,却不能对#define PI 3.1415926的浮点型常量使用?
Asskicker_Ryan
2014-11-30 02:10:50
RT
例如
&"Hello"是合法的,而 &PI 则不行?
...全文
485
9
打赏
收藏
用&取地址时,为什么可以对诸如"Hello"的字符串常量使用,却不能对#define PI 3.1415926的浮点型常量使用?
RT 例如 &"Hello"是合法的,而 &PI 则不行?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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;就可以。请问是为什么呢?
C/C++预编译指令与宏定义:从原理到实战的完整指南
本文系统讲解C/C++预编译指令(如#include、#
define
、#ifdef等)的工作机制与
使用
规范,深入剖析宏定义的对象宏、带参宏、#和##运算符及其安全编写准则,重点解析头文件重复包含问题的根源及Include Guards与#pragma once两种解决方案,并涵盖大型项目中宏管理、条件编译组织、VSCode智能感知配置及预处理错误排查方法。
C基础笔记20250325
define
由于宏仅是文本替换,在调试
时
查看变量值
时
无法直接看到宏的名字,这可能使调试更加困难。宏的作用范围从定义点开始直到文件结束或遇到#undef指令为止,不具备块级作用域的概念。宏是全局性的,除非特别限制在一个文件内通过条件编译实现。适合用于定义简单的常数值,特别是当这个值需要被用作数组大小、case标签或其他不允许有变量的地方。也常用于条件编译。const。
Windows A
PI
函数
《Windows A
PI
函数手册》摘要 本文档是Windows平台开发的权威参考手册,全面收录774个核心A
PI
函数,涵盖系统管理、进程线程、窗口消息、文件操作、图形处理等12大功能模块。手册采用结构化编排,主要特点包括: 编码规范 详细区分多字节(char)与宽字符(wchar_t)编码体系 提供LPSTR/LPCWSTR等
字符串
指针类型的完整解析 说明UTF-8与GBK编码转换的实际应用场景 核心功能模块 窗口创建:完整展示从注册类到消息循环的窗口生命周期 文件操作:覆盖CreateFile/ReadF
utf-8 utf-16转换代码
源码链接: https://pan.quark.cn/s/a4b39357ea24 近期在Linux与Windows系统间进行字符传输
时
遇到了编码错乱问题,因此对字符编码进行了深入研究。 查阅了网络中关于UTF-8/UTF-16转换的相关文献,发现仅对0x10000以下的Unicode编码实施了转换;对其源代码进行了修订与完善,确保能够完成所有UTF-8/UTF-16的转换工作,现将其分享给各位。
易语言源码
取
汉字笔画模块
易语言源码
取
汉字笔画模块
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章