• 驱动中的C语言指针与下标


      在看《linux设备驱动开发详解》时,有如下代码,中间代码省略:

    struct globalmem_dev *globalmem_devp;     /*设备结构体指针*/
    
    globalmem_devp = kmalloc(2*sizeof(struct globalmem_dev), GFP_KERNEL);
    
    globalmem_setup_cdev(&globalmem_devp[0], 0);
    globalmem_setup_cdev(&globalmem_devp[1], 1);
    #include <stdio.h>
    #include <stdlib.h>
    
    struct lc{
            int a;
            int b;
            int c[5];
    };
    
    int main(void)
    {
        struct lc * lc;
        lc = malloc(2*sizeof(struct lc));
        lc[0].a = 1;
        lc[1].a = 2;
        lc->b = 3;
        (lc+1)->b = 4;
        
        printf("lc[0].a = %d\n", lc[0].a);
        printf("lc[0].a = %d\n", lc[1].a);
        
        printf("lc->b = %d\n", lc->b);
        printf("(lc+1)->b = %d\n", (lc+1)->b);
        
        return 0;
    }


      这里定义了一个结构体指针,分配了两倍于这种结构大小的空间,然后能过下标[]引用第一个或第二个结构。于是写如下测试代码:

    编译执行,输出结果:

    lc[0].a = 1
    lc[1].a = 2
    lc->b = 3
    (lc+1)->b = 4

      这个例子说明了指针、下标、指针自加自减的关系,下村lc[1]或lc+1,是当前指针lc指向加上lc所指向结构大小的偏移量,但不同的时,下标引用lc[1]得到的是下一个结构体,而lc+1得到的是指向下一个结构体的指针。

  • 相关阅读:
    Hbase安装配置
    HBASE概念补充
    Hbase概述
    qt creator源码全方面分析(2-8)
    qt creator源码全方面分析(2-7)
    qt creator源码全方面分析(2-6)
    qt creator源码全方面分析(2-5)
    qt creator源码全方面分析(2-3)
    qt creator源码全方面分析(2-2)
    qt creator源码全方面分析(2-4)
  • 原文地址:https://www.cnblogs.com/lucheng/p/2832211.html
Copyright © 2020-2023  润新知