结构体与指针
下面来介绍如何使用指针来访问结构体以及结构体中的成员数据。先定义一个结构体类型如下表:
typedef struct _student
{
int id;
int age;
char name[20];
char sex;
float score;
} student, *pstudent;
再定义并初始化一个结构体变量s和结构体指针变量ps指向结构体变量s:
student s
= {1,30,”tom”,’M’,
student *ps=&s;
这个时候,可以使用ps和->运算符来访问结构体中的成员,比如:
printf(“id:%d,age:%d,name:%s,sex:%c,score:%f\n”,
ps->id,ps->age,ps->name,ps->sex,ps->score);
我们也可以在堆上申请内存来存放结构体中的数据,比如:
student * pstdt = (student*)malloc(sizeof(student));
if(pstdt)
{
memset(pstdt, 0, sizeof(student));
pstdt->age = 19;
pstdt->id = 1001;
strcpy(pstdt->name, "tom");
pstdt->score = 99.5;
pstdt->sex = 'M';
printf("id:%d,age:%d,name:%s,sex:%c,score:%f\n",
pstdt->id, pstdt->age,pstdt->name,pstdt->sex,pstdt->score);
free(pstdt);
pstdt = NULL;
}
注意,需要再次强调的是,结构体指针在进行加减运算的时候,加减的步长是结构体单位长度的倍数。比如:
student *ps=&s;
ps = ps + n;//n为某个整数
这里的n代表的不是n个字节,而是n个sizeof(student)的字节。也就是在完成上面的计算后,ps向前移动了n*sizeof(student)这么多个字节。