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

2017-06-15 16:07:48 +08:00
 52coder
#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,起初是用的一级指针,发现解决不了问题,现在用二级指针,对地址这部分存在疑问.

1176 次点击
所在节点    问与答
8 条回复
kmyzzy
2017-06-15 16:25:07 +08:00
用一级指针,senior.people = stu
kmyzzy
2017-06-15 16:25:43 +08:00
错了,是 senior.people = tmp
52coder
2017-06-15 16:38:14 +08:00
@kmyzzy 这么肯定是错的,应该是&tmp
52coder
2017-06-15 16:38:43 +08:00
@kmyzzy grade->people = &tmp;
kmyzzy
2017-06-15 16:43:39 +08:00
@52coder 我说了把 people 定义成一级指针,就是 stu *people;
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
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
2017-06-15 19:36:20 +08:00
@dingz 柔性数组,差不多解决了,多谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/368643

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX