查看: 3839|回复: 8

[已解决] LPC54608例程中指针的问题

[复制链接]
  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2017-3-26 21:03:41 | 显示全部楼层 |阅读模式
    本帖最后由 wambob 于 2017-3-27 12:54 编辑

    工程路径:SDK_2.0_LPCXpresso54608\boards\lpcxpresso54608\driver_examples\lcdc\lcdc_tft
    对C语言而言,指针是精华,精通也不易。
    1. static void APP_FillBuffer(void *buffer)
    复制代码
    上面这个函数里有个数组指针
    1. uint8_t(*buf)[IMG_WIDTH / APP_PIXEL_PER_BYTE] = buffer;
    复制代码
    buf是一个指针,指向匿名数组的首地址,有[IMG_WIDTH / APP_PIXEL_PER_BYTE]个元素,类型为uint8_t。并且把void 指针形参buffe赋给了buf。
    但在函数中下面出现的buf [j]怎么理解?
    1. for (i = 0; i < upperLeftY; i++)
    2.     {
    3.         for (j = 0; j < IMG_WIDTH / APP_PIXEL_PER_BYTE; j++)
    4.         {
    5.             /* Background color. */
    6.             buf[i][j] = colorToSet;
    7.         }
    8.     }
    复制代码







    最佳答案

    本帖最后由 ALTIUM2 于 2017-3-27 22:54 编辑 C语言如何通过指针引用数组? C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。 引入指针变量后,就可以用两种方法来访问数组元素 ...
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-3-26 23:00:56 | 显示全部楼层
    本帖最后由 ALTIUM2 于 2017-3-27 22:02 编辑

    ========================================================

    二维数组A[m][n],这是一个m行,n列的二维数组。
    例如:定义如 unsigned char a[3][4];

    数组指针:数组名的指针,即数组首元素地址的指针。即是指向数组的指针。
    例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

    ========================================================
    uint8_t (*buf)[IMG_WIDTH / APP_PIXEL_PER_BYTE] = buffer;
    uint8_t A[m][n];
    这是一个数组指针(你可以心里把它也看成是一个前面是指针的二维数组,这样方便理解)

    for (i = 0; i < upperLeftY; i++)
    //这个看成是对二位数组m的操作

    for (j = 0; j < IMG_WIDTH / APP_PIXEL_PER_BYTE; j++)
    //这个看成是对二位数组n的操作

    /* Background color. */buf[j] = colorToSet;

    这里的"j" 也就可以看成二维数组的"n"了。


    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-3-26 23:18:33 | 显示全部楼层
    想想自己语言表达不好,语文是体育老师教的,所以还是搬出大神把
    C语言程序设计(第四版) 谭浩强著 高清晰版.PDF 第251页

    1111.jpg
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-4-27 08:44
  • 签到天数: 64 天

    连续签到: 1 天

    [LV.6]常住居民II

    26

    主题

    577

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1703
    最后登录
    1970-1-1
    发表于 2017-3-27 08:37:45 | 显示全部楼层
    楼上正解,uint8_t(*buf)[]是一个指向数组的指针,可以这样理解,buf里的每一个元素是一个数组。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
     楼主| 发表于 2017-3-27 12:52:07 | 显示全部楼层
    ALTIUM2 发表于 2017-3-26 23:18
    想想自己语言表达不好,语文是体育老师教的,所以还是搬出大神把
    C语言程序设计(第四版) 谭 ...

    数组指针不是指向匿名数组吗,数组指针名怎么成了数组名
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
     楼主| 发表于 2017-3-27 12:56:05 | 显示全部楼层
    ALTIUM2 发表于 2017-3-26 23:00
    ========================================================

    二维数组A[m][n],这是一个m行,n列的二维数 ...

    那个buf[j] 应为buf[j],打错了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-3-27 22:37:17 | 显示全部楼层
    本帖最后由 ALTIUM2 于 2017-3-27 22:55 编辑
    wambob 发表于 2017-3-27 12:52
    数组指针不是指向匿名数组吗,数组指针名怎么成了数组名

    C语言如何通过指针引用数组?

    好奇怪,我发现我复制的有些内容保存后会丢失,奇了怪了!!!

    我居然发现这个回复如果你修改的话,会把字体变斜体,还会把数组标识给去掉~ 这




    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-3-27 22:49:38 | 显示全部楼层
    本帖最后由 ALTIUM2 于 2017-3-27 22:54 编辑
    1. C语言如何通过指针引用数组?

    2. C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。

    3. 引入指针变量后,就可以用两种方法来访问数组元素了。

    4. 如果p的初值为&a[0],则:
    5. 1. p+i和a+i就是a[i]的地址,或者说它们指向a数组的第i个元素。
    6. 2. *(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。例如,*(p+5)或*(a+5)就是a[5]。
    7. 3. 指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。

    8. 根据以上叙述,引用一个数组元素可以用:
    9. 下标法:即用a[i]形式访问数组元素。在前面介绍数组时都是采用这种方法。
    10. 指针法:即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其中a是数组名,p是指向数组的指针变量,其处值p=a。
    复制代码


    同理,二维数组也一样的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-3-27 22:50:43 | 显示全部楼层
    上面这个就没事,刚才的回复您的就会把a[i]数组直接显示成a,郁闷
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-24 07:09 , Processed in 0.107039 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表