结构体中的各个成员是按顺序连续存放在内存中的。如果一个结构体指针指向结构体变量,结构体指针所保存的值是它所指向的结构体变量所占内存的首地址。
struct student s1;
//略去对s1进行赋值的代码
//......
struct student *p;
p=&s1;
printf("%d,%s",p->number,p->name);
在C语言中,为了方便和直观,往往把(*p).number改写为p->number。两种写法都是可以的。
//指向结构体数组的指针
#include<stdio.h>
int main()
{
struct student
{
int number;
char name[20];
char sex;
int age;
char addr[30];
};
struct student s[3] = { {10000,"Zhang",'m',21,"Shang Hai"},
{10001,"Li",'f',20,"Bei Jing"},
{10002,"Liu",'m',22,"Guang Dong"} };
struct student *p;
//p开始指向结构体数组s的第一个元素,即第一个结构体变量
//p++使p指向数组的第二个元素
for(p=s; p<s+3; p++)
printf("%d,%s,%c,%d,%s\n",p->number,p->name,p->sex,p->age,p->addr);
return 0;
}
运行结果