V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
52coder
V2EX  ›  问与答

新人问一个关于指针的问题

  •  
  •   52coder · 2017-06-15 16:07:48 +08:00 · 1234 次点击
    这是一个创建于 2721 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct student
    {
        int age;
        int sex;
    }stu;
    
    typedef struct classroom
    {
        int num;
        stu **people;
    }class;
    
    int main()
    {
        //定义临时变量 tmp
        stu * tmp = NULL;
        //定义班级
        class senior;
        //班级人数
        senior.num = 10;
        
        class *grade =&senior;
        
        tmp = malloc(senior.num * sizeof(stu));
        printf("malloc memory address is %p\n",tmp);
        printf("sizeof(int) is %d\n",sizeof(int));
        printf("sizeof(senior) is %d\n",sizeof(senior));
        printf("sizeof(stu) is %d\n",sizeof(stu));
        
        tmp[0].age = 20;
        tmp[0].sex = 1;
        
        tmp[1].age = 25;
        tmp[1].sex = 0;
        
        printf("people[0] age is %d\n",tmp[0].age);
        printf("people[1] age is %d\n",tmp[1].age);
        
    
        
        return 0;
    }
    

    我的疑问是想通过几种方式操作申请的那块内存( 10 个 stu 结构体类型),既能通过 tmp 操作,又能通过结构体 senior 或者结构体指针 grade 操作,可是尝试了多次发现有点不对,我已经在指针和二级指针中迷失了方向.

    我的几点理解: 我在结构体 class 班级中定义关于 stu 的二级指针,方便通过 stu 的指针去操作和管理 stu,起初是用的一级指针,发现解决不了问题,现在用二级指针,对地址这部分存在疑问.

    8 条回复    2017-06-15 19:36:20 +08:00
    kmyzzy
        1
    kmyzzy  
       2017-06-15 16:25:07 +08:00
    用一级指针,senior.people = stu
    kmyzzy
        2
    kmyzzy  
       2017-06-15 16:25:43 +08:00
    错了,是 senior.people = tmp
    52coder
        3
    52coder  
    OP
       2017-06-15 16:38:14 +08:00
    @kmyzzy 这么肯定是错的,应该是&tmp
    52coder
        4
    52coder  
    OP
       2017-06-15 16:38:43 +08:00
    @kmyzzy grade->people = &tmp;
    kmyzzy
        5
    kmyzzy  
       2017-06-15 16:43:39 +08:00
    @52coder 我说了把 people 定义成一级指针,就是 stu *people;
    dingz
        6
    dingz  
       2017-06-15 16:54:21 +08:00
    typedef struct classroom
    {
    int num;
    stu people[0];
    }class;

    class *grade = (class *)malloc(sizeof(class) + sizeof(stu) * 10);
    grade->num = 10;
    dingz
        7
    dingz  
       2017-06-15 16:56:16 +08:00
    grade->people[0].age = 20;
    grade->people[0].sex = 1;

    grade->people[1].age = 25;
    grade->people[1].sex = 0;
    52coder
        8
    52coder  
    OP
       2017-06-15 19:36:20 +08:00
    @dingz 柔性数组,差不多解决了,多谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:39 · PVG 04:39 · LAX 12:39 · JFK 15:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.