linux c语言变量地址类型,C语言基础知识:访问内存地址的方法

汇编语言寄存器间接寻址方法

#define GPJ0CON0xE0200240

ldr r0, =GPJ0CON //把地址值赋给寄存器r0,从后面的=可以看出用的是ldr伪指令,因为需要编译器来判断这个数

ldr r1, =0x11111111 //将设定的数暂存到寄存器r1中

str r1, [r0] //寄存器间接寻址。功能是把r1中的数写入到r0中的数为地址的内存中去

ldr(load register)指令将内存内容加载入通用寄存器。

str(store register)指令将寄存器内容存入内存空间中。

ldr/str组合用来实现 ARM CPU和内存数据交换

C语言中访问内存地址的方法

1)用指针间接访问内存

C语言中访问内存地址的方法如下片段。在ARM中(统一编址),寄存器的地址类似于内存地址(IO与内存统一编址的),所以       这里的问题是用C语言读写寄存器,就是用C语言来读写内存地址。用C语言来访问内存,就要用到指针

#define GPJ0CON0xE0200240

unsigned int *p = (unsigned int *)GPJ0CON; //注意ARM中常用无符号整型指针,(unsigned int *)是强制类型转换,让等号两边类型匹配

*p = 0x11111111; //解引用,间接改变GPJ0CON地址中存的数

可以看出,C语言间接访问内存地址的方式是通过指针间接访问。

2)C语言通过(变量名)直接内存

假如定义了一个int a;那么直接给变量名赋值a = 5;   这样的方式就直接访问量内存地址

int a;    /* 编译器帮我们申请了1个int类型的内存格子(长度是4字节,地址是确定的,但是只有

编译器知道,我们是不知道的,也不需要知道。),并且把符号a和这个格子绑定。*/

a = 5;    // 编译器发现我们要给a赋值,就会把这个值5丢到符号a绑定的那个内存格子中。

【扩展】C语言中函数:一段代码的封装。

函数名的实质:就是这一段代码的首地址。所以说函数名的本质也是一个内存地址。

【注意】内存单元格子的编址单位是字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值