C语言 单片机 嵌入式 宏定义问题 #define

比如说我定义#definea1a这个不算变量,那么这个a的值存放在哪里?为什么内存中查不到a的地址和值呢?用sizeof测试,又可以知道大的类型大小。。。。。非常困惑。。... 比如说我定义#define a 1
a这个不算变量,那么这个a的值存放在哪里?为什么内存中查不到a的地址和值呢?
用sizeof测试,又可以知道大的类型大小。。。。。
非常困惑。。。
还有顺便问问c中的立即数、常数会存ram里面么?局部变量又是怎么存贮的,自己一下子也搞混了
编译系统管理的内存区地址不能查阅么?
vc调试里面可以查询32位地址,我的内存也才2G,那么为什么查不到呢?编译系统管理的内存区在何处?

-------------------------------------------
谢谢大家的发言,我自己才琢磨下
展开
 我来答
freego_88
2010-09-09 · 超过30用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:71.9万
展开全部
1,a这个不算变量,那么这个a的值存放在哪里?为什么内存中查不到a的地址和值呢?
--因为单片机里根本就没有a,只有常数1,如果你的a是指令的一部分(通过汇编器看)是没有地址和值的,如果以表格方式存储,应该能查到地址;

2,还有顺便问问c中的立即数、常数会存ram里面么?局部变量又是怎么存贮的?
--立即数是指令的一部分,被编译成了机器码的一部分;常数一般以表格形式编程,存在ROM中;局部变量一般是使用寄存器R1~R7存储;

3,编译系统管理的内存区地址不能查阅么?
--当然能查

4,vc调试里面可以查询32位地址,我的内存也才2G,那么这个编译系统管理的内存区在何处?
--要查了才知道,但为什么要知道呢?

另外,出现问题1,说明你需要看看C语言教材或编译原理;出现问题2,说明你需要看看C汇编后的样子,以及8051汇编语言及机器码 :)
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
百度网友27209e7cd
2010-09-09 · TA获得超过1406个赞
知道小有建树答主
回答量:805
采纳率:0%
帮助的人:994万
展开全部
宏定义 #define只是在预编译时简单的文字替换,其实并没有定义任何的变量。
#define a 1
uchar i;
main()
{i=a;}
其实在预编译以后,程序就成了{i=1;}程序里面根本就没有a。
猜测sizeof得到的并不是a,是宏定义下的那个东西的长度。因为sizeof(a),预编译后就是sizeof(1)。

立即数、常数都在ROM里面,占用程序空间。当程序取用这些数时,会将值赋给RAM里面的某一个变量(或送入某一寄存器),参与程序的运行。
局部变量则是在RAM里面,调用函数时临时分配的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
avatian1
2010-09-09 · TA获得超过1万个赞
知道大有可为答主
回答量:6315
采纳率:0%
帮助的人:2924万
展开全部
这个a是常量,叫符号常量。存放在编译系统管理的内存区。

C语言中所有的常量都存放在系统管理的内存区。而不是用户区。
局部变量分auto型和static型,前者放在动态的用户存储区,后者放在静态的用户存储区。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式