1 结构体指针
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设置一个指针变量,用它指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素,从而能够通过结构体指针快速访问结构体内的每个成员。
【例】结构体指针的使用
#include <cstdio>
struct student{
int num;
char name[20];
char sex;
};
int main()
{
struct student s={1001,"wangle",'M'};
struct student sarr[3]={1001,"lilei",'M',1005,"zhangsan",'M',1007,"lili",'F'};
struct student *p;//定义结构体指针
int num;
p=&s;
printf("%d %s %c\n",p->num,p->name,p->sex);
p=sarr;
printf("%d %s %c\n",(*p).num,(*p).name,(*p).sex);//方法一获取成员
printf("%d %s %c\n",p->num,p->name,p->sex);//方法二获取成员
printf("------------------------------\n");
p=p+1;
printf("%d %s %c\n",p->num,p->name,p->sex);
return 0;
}
由例可以看到,p就是一个结构体指针,可以对结构体s取地址并赋给p,这样借助成员选择操作符,就可以通过p访问结构体的每个成员,然后进行打印。我们知道数组名中存储的是数据的首地址,所以可以将sarr赋给p,这样就可以通过两种方式访问对应的成员。
2 typedef的使用
前面定义结构体变量时使用的语句是struct students,以这种方式来定义结构体变量每次都需要写struct student。可以选择使用typedef声明新的类型名来代替已有的类型名。
【例】typedef的使用
#include <cstdio>
//结构体指针
typedef struct student{
int num;
char name[20];
char sex;
}stu,*pstu;
typedef int INTEGER;
int main()
{
stu s={1001,"wangle",'M'};
pstu p;
INTEGER i=10;
p=&s;
printf("i=%d,p->num=%d\n",i,p->num);
return 0;
}
使用stu定义结构体变量和使用struct student定义结构体变量是等价的;使用INTEGER定义变量i和使用int定义变量i是等价的;pstu等价于struct student*,所以p是结构体指针变量。