请教一个低级问题

guhanghui 2013-03-28 10:38:01

#define Ip "192.168.1.1" //宏

char *ipAdd = NULL; //全局

int getIp()
{
ipAdd = Ip;
return;
}

请问指针ipAdd 指向的是常量区的地址么?
...全文
230 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2013-03-29
  • 打赏
  • 举报
回复
宏定义 没有地址空间
逍遥子_ 2013-03-29
  • 打赏
  • 举报
回复
宏在编译的时候就是被替换成了常量字符串, #define Ip "192.168.1.1" //宏 char * ipAdd = Ip; 实际上并不存在,存在的是:char * ipAdd ="192.168.1.1" ; 在编译的时候到底编译器会把常量字符串"192.168.1.1"编译到一个只读的段里(例如".rodata"段),还是直接编译到数据段(例如".data"段),跟编译器有关系。
vuqrzk5w 2013-03-29
  • 打赏
  • 举报
回复
printf("%d", ipAdd)看一下
AnYidan 2013-03-29
  • 打赏
  • 举报
回复
引用 4 楼 AnYidan 的回复:
宏定义 没有地址空间
\ sorry, 答错,vs2010 的确在常量区 楼上哪位可以回答一下: 我曾在 microchip 的 c18 下定义了大量的宏定义(程序中未用到),与未定义这些宏定义时的程序比较,数据区占用内存数量相同(未做任何优化)
SKATE11 2013-03-29
  • 打赏
  • 举报
回复
是的 没错
lin5161678 2013-03-29
  • 打赏
  • 举报
回复
简单理解 那就 是 实际上 是不是在所谓的"常量区" 是依赖具体实现的 没人要求一定得把"123"放进所谓的"常量区"
独孤过儿 2013-03-29
  • 打赏
  • 举报
回复
引用 4 楼 AnYidan 的回复:
宏定义 没有地址空间
你没理解什么是“地址空间”。
nadleeh 2013-03-29
  • 打赏
  • 举报
回复
就是在常量区,不要去修改它.
赵4老师 2013-03-29
  • 打赏
  • 举报
回复
编译选项加/EP /P,重新编译,查看宏展开后对应的.i文件。gcc加-E
zhouxf_cn 2013-03-29
  • 打赏
  • 举报
回复
你可以通过ipAdd这个指针修改下,然后段错误出现了。。。。。
FredHuang85 2013-03-29
  • 打赏
  • 举报
回复
string常量存放位置就是常量区,所以答案是:是的!
Athenacle_ 2013-03-29
  • 打赏
  • 举报
回复
引用 4 楼 AnYidan 的回复:
宏定义 没有地址空间
一个没有理解C语言编译模型的星星大神
jielin2012 2013-03-28
  • 打赏
  • 举报
回复
是!!!!!!
漫步者、 2013-03-28
  • 打赏
  • 举报
回复
引用 楼主 guhanghui 的回复:
#define Ip "192.168.1.1" //宏 char *ipAdd = NULL; //全局 int getIp() { ipAdd = Ip; return; } 请问指针ipAdd 指向的是常量区的地址么?
不是常量区,ipAdd 作为指针地址,它是用户操作它,容易造成未定义行为。
northwesternwind 2013-03-28
  • 打赏
  • 举报
回复
是的

69,373

社区成员

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

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