TA的每日心情 | 开心 2024-1-16 17:48 |
---|
签到天数: 592 天 连续签到: 1 天 [LV.9]以坛为家II
|
本帖最后由 robe.zhang 于 2018-8-9 16:52 编辑
指针用法实例
看 uboot 源码时候,看到一个指针的用法觉得比较好,代码简单好写好看,
先看一段实验源码,猜猜会打印什么:- #include<stdio.h>
- typedef struct robe{
- char robe_int[0x100];
- }robe_t;
- int main(void)
- {
- robe_t robe_a[0x10];
-
- printf("address robe_a :<%p>.\n",robe_a);
- printf("address robe_a+1 :<%p>.\n",robe_a+1);
- printf("address robe_a+2 :<%p>.\n",robe_a+2);
-
- printf("address robe_a[0]:<%p>.\n",&robe_a[0]);
- printf("address robe_a[1]:<%p>.\n",&robe_a[1]);
- printf("address robe_a[2]:<%p>.\n",&robe_a[2]);
-
- printf("sizeof(robe_t) :%lu\n",sizeof(robe_t));
- printf("sizeof(robe_a) :%lu\n",sizeof(robe_a));
- printf("sizeof(robe_a[0]):%lu\n",sizeof(robe_a[0]));
-
- return 0;
- }
复制代码
编译运行:
数组 robe_a[0x10] 中,
robe_a 的地址 = &robe_a[0]
robe_a +1 的地址 = &robe_a[1]
robe_a +2 的地址 = &robe_a[2]
也就是 robe_a +1,这个 1 的单位是 sizeof(robe_t)/sizeof(robe_a[0]),也就是 robe_a + m = &robe_a[m]
当时源码解析没说这个用法,看看 <uboot屏幕适配源码解析> 第5张图片中行号19的代码用法,一摸一样,当时粗粗看过没提:原文链接:http://jingyan.eeboard.com/article/76526
- 原文中自己增加的实例是 displays[1],1 保存在 i 中,
- 这个 dev = displays +i ,和 dev = &displays[i] dev = & displays[1] 一样样的效果,
- 就把实例 displays[1] 的地址传给 dev 指针了
复制代码
|
|