查看: 2379|回复: 0

[原创] 指针用法实例

[复制链接]
  • TA的每日心情
    开心
    2024-1-16 17:48
  • 签到天数: 592 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2018-8-9 16:27:37 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 robe.zhang 于 2018-8-9 16:52 编辑

    指针用法实例



    看 uboot 源码时候,看到一个指针的用法觉得比较好,代码简单好写好看,
    先看一段实验源码,猜猜会打印什么:
    1. #include<stdio.h>

    2. typedef struct robe{
    3.         char robe_int[0x100];
    4. }robe_t;

    5. int main(void)
    6. {
    7.         robe_t robe_a[0x10];
    8.         
    9.         printf("address robe_a   :<%p>.\n",robe_a);
    10.         printf("address robe_a+1 :<%p>.\n",robe_a+1);
    11.         printf("address robe_a+2 :<%p>.\n",robe_a+2);
    12.         
    13.         printf("address robe_a[0]:<%p>.\n",&robe_a[0]);
    14.         printf("address robe_a[1]:<%p>.\n",&robe_a[1]);
    15.         printf("address robe_a[2]:<%p>.\n",&robe_a[2]);
    16.         
    17.         printf("sizeof(robe_t)   :%lu\n",sizeof(robe_t));
    18.         printf("sizeof(robe_a)   :%lu\n",sizeof(robe_a));
    19.         printf("sizeof(robe_a[0]):%lu\n",sizeof(robe_a[0]));
    20.         
    21.         return 0;
    22. }
    复制代码

    编译运行:
    1.png

    数组 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
    2.png
    1. 原文中自己增加的实例是 displays[1],1 保存在 i 中,
    2. 这个 dev = displays +i ,和 dev = &displays[i]   dev = & displays[1] 一样样的效果,
    3. 就把实例 displays[1] 的地址传给 dev 指针了
    复制代码





    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-8 05:28 , Processed in 0.126763 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.