访问结构体数组的三种方法
在堆上建立结构体数组
Stu ** arrstu = malloc(sizeof(Stu*)*20);
赋值
Stu s1 = {"dai",20};
arrstu[0] = &s1;
一、下标加->法
连续的内存空间都可以使用[]方法访问空间
arrstu[i]->name
当arrstu[i]后取的一维结构体的指针,注意取得的是指针。要想访问指针类型的结构体需要使用->
二、下标加*法
(*arrstu[i]).name
当arrstu[i]后取的一维结构体的指针,然后对其(解引用)***获取指针所指向的内容,然后使用.**访问其内容。
三、解引用加->法
(*(arrstu+i))->name
*(arrstu+i)的作用和arrstu[i]一样,获取一维结构体指针,要想访问指针类型的结构体需要使用->
四、双重解引用法
(**(arrstu+i)).name
*(arrstu+i)的作用和arrstu[i]一样,获取一维结构体指针,然后再对其解引用获取其指针所指向的内容,使用.访问其内容。
五、整体代码展示
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student{
char name[20];
int age;
};
typedef struct student Stu;
int main()
{
Stu ** arrstu = malloc(sizeof(Stu*)*20);
Stu s1 = {"dai",20};
Stu s2 = {"ddd",21};
Stu s3 = {"aaa",22};
Stu s4 = {"iii",23};
Stu s5 = {"hhh",24};
Stu s6 = {"ddd",25};
arrstu[0] = &s1;
arrstu[1] = &s2;
arrstu[2] = &s3;
arrstu[3] = &s4;
arrstu[4] = &s5;
arrstu[5] = &s6;
int i;
printf("访问形式1\n");
for(i=0;i<5;i++)
{
printf("stuarr = %s %d\n",arrstu[i]->name,arrstu[i]->age);
}
printf("访问形式2\n");
for(i=0;i<5;i++)
{
printf("stuarr = %s %d\n",(*arrstu[i]).name,(*arrstu[i]).age);
}
printf("访问形式3\n");
for(i=0;i<5;i++)
{
printf("stuarr = %s %d\n",(*(arrstu+i))->name,(*(arrstu+i))->age);
}
printf("访问形式4\n");
for(i=0;i<5;i++)
{
printf("stuarr = %s %d\n",(**(arrstu+i)).name,(*(*(arrstu+i))).age);
}
free(arrstu);
return 0;
}