各位老哥,昨天上机有道题百思不得其解,在此诚恳的发文,希望有朋友们多多指教,我已经快疯了.
问题描述如下,如有描述不清楚的地方,欢迎评论指出.
如下结构体:
typedef struct student
{
int age;
int height;
}stu;
typedef struct school
{
int num;
stu **boys;
}grade;
我的目的是让结构体grade(班级)中包含学生的个数与指向学生结构体的二级指针。(当然有更好的实现比如柔性数组,我们就讨论这个二级指针的形式)
做如下操作.
假设有结构体
stu *tmp = NULL;
grade oneclass;
//定义班级男生个数
oneclass.num = 55;
grade *one=&oneclass;
声明了结构体grade和指向结构体grade的指针.
然后我去申请一片内存
//申请内存
tmp = malloc(oneclass.num*sizeof(stu));
one->boys = &tmp;
那么问题来了:
如何通过多种方法访问申请的内存块.
最后附上我写的源码,方便各位老哥调试程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
int age;
int height;
}stu;
typedef struct school
{
int num;
stu **boys;
}grade;
int main()
{
stu *tmp = NULL;
grade oneclass;
//定义班级男生个数
oneclass.num = 55;
grade *one=&oneclass;
//申请内存
tmp = malloc(oneclass.num*sizeof(stu));
one->boys = &tmp;
//如何通过tmp 和结构体指中boyes指针来操作 申请的内存,请打印第一个 第二个 第N个元素地址(两种方式打印)
return 0;
}
这样子打印出来的3个值是一样的。
而且,
tmp[1]
并没有指向55*8之后。