zoukankan      html  css  js  c++  java
  • 驱动中的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得到的是指向下一个结构体的指针。

  • 相关阅读:
    ie和firefox浏览器对透明flash的兼容性问题
    CSS样式命名规则
    js中用script 嵌套script块
    visual stdio2005常用快捷键
    SQL数据库设计的命名规范
    js实现excel数据导入
    程序员每天该做的事
    用户体验公式
    sql编程命名规范
    五种常见的ASP.NET安全缺陷
  • 原文地址:https://www.cnblogs.com/lucheng/p/2832211.html
Copyright © 2011-2022 走看看