对使用指针来处理数据读者应有了一些体会,即先定义一以数据或元素类型为基类型的指针变量;其次在定义的指针变量与要处理的数据之间建立关联,让指针变量指向要处理的数据;然后引用指针指向变量来完成数据的处理。
使用指针来处理结构体数据也不例外,下面举例说明。
例指向结构体变量的指针变量的应用示例。
假设有一结构体,包含某人的姓名和年龄,用指向结构体变量的指针变量完成输出处理。
程序如下:
/*程序10一13,指针应用于结构体*/
main()
{struct person
{char *name;
int age:
)someone;
struct person *p;/*定义结构体类型的指针变量*/
someone.name=”张三”;/*假定姓名为张三*/
someone.age=20;
p=&s19meone/*建立关联,*p即someone*/
printf(”姓名=%s,年龄=%d\n\",(*p).name,(*p).age);
/*等价于printf(”姓名=%s,年龄=9td\n\",someone.name,someone.age);*/
)
运行结果:姓名=张三,年龄=20
说明:
(1)在用指向结构体的指针变量描述结构体的分量时,必须使用“()”。如不使用“()”,像上例中*p.name,由于“.”运算的优先级比“*”高,这时实际表示就成为*(p.name),而不是(*p).name。
(2)结构体变量的指针,是指结构体变量的首地址,而不是变量中某成员的地址。指向结构体的指针变量不能指向结构体的成员。如:
p=&someone.name;/*错误*/
(3)引入指向结构体的指针变量后,为了书写方便和直观使用,C语言提供指向结构体成员运算来得到结构体的成员。“一>”运算符由“一”和“>”复合组成。如p一>name、p一>age即someone.name、someone.age。“一>”运算优先级与“.”运算相同。
至此,我们有三种形式来引用结构体成员:结构体变量.成员名、(*结构体指针).成员名、结构体指针一>成员名。
(4)对于使用结构体指针来处理结构体数组与前面介绍的使用指针来处理数组完全类似。