变量存储单元与指针

试验程序

#include <rtthread.h>

int main(void)

 {

   char num  = '1'; //定义字符变量num,并赋值字符‘1’

   char *ptr = # //定义字符变量的指针ptr,并指向num变量

   char **p_ptr = &ptr; //定义字符变量的指针p_ptr,并指向ptr变量

   rt_kprintf("指针ptr指向的值%x\n",*ptr);

   rt_kprintf("指针ptr的值%p\n",ptr);

   rt_kprintf("变量num的值用十六进制格式输出%x\n",num);

   rt_kprintf("变量num的值用字符格式输出%c\n",num);

   rt_kprintf("变量num的地址%p\n",&num);

   rt_kprintf("指向ptr指针变量的指针值%p\n",p_ptr);  

   return 0;

 }

执行程序后输出如下:

指针ptr指向的值31

指针ptr的值20002d1c

变量num的值用十六进制格式输出31

变量num的值用字符格式输出1

变量num的地址20002d1c

指向ptr指针变量的指针值20002d18

解析

程序中有涉及三个变量,分别是num、ptr、p_ptr,它们的值分别是十六进制的31、20002d1c、20002d18。它们都是变量,虽然声明的类型都为char字符型,但对于32位地址系统来说,指针都是32bit,即占4字节;而字符变量num占1字节。ptr、p_ptr是特殊的变量,是用于保存指针的变量,习惯上称为指针变量,实际上保存的就是计算机系统的“地址”。

三个变量num、ptr、p_ptr在存储器里的位置如下图所示:

计算机编译时在存储器里划分了3个空间绑定这3个变量,写程序时,通过变量操纵相应的存储空间存放的值。这个系统采用小端保存数据,即低位地址保存低位字节的数据。

 变量有三个要素

1.数据类型 (Type): 决定在内存中分配的空间

2.变量名(Name) : 编写程序时对所分配空间的操纵名称

3.值(Value) :空间中存储的数据

在调试程序时,通常可以查看这些要素:

普通变量num代表存储空间的值,“&num”代表其地址。对于指针变量ptr来说,ptr保存地址,“*ptr”代表其地址指向空间的值,“&ptr”代表保存指针空间的地址。而“*num”表示指出num值为地址的内容,由于num只有1字节,编译器会认为错误而不能生成可执行文件,故“*num”没有意义。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值