用指针访问成员
作者:互联网
//使用指向结构的指针 #include<stdio.h> #define LEN 20 struct name { char first[LEN]; char last[LEN]; }; struct guy{ struct name handle; char favfood[LEN]; char job[LEN]; float income; }; int main(void) { struct guy fellow[2]={ { {"yitao","cao"}, "芒果", "IT 农民", 15000.00 }, { {"yitian","qian"}, "不知道", "老师", 7000.00 } }; struct guy *him; //这是一个指向结构的指针 printf("address #1 : %p #2: %p \n", &fellow[0], &fellow[1]); him = &fellow[0]; //告诉编译器该指针指向何处 printf("pointer #1: %p #2: %p\n", him, him+1); printf("him ->income is $%.2f: (*him).income is $%.2f\n", him -> income,(*him).income); him++; //指向下一个结构 printf("him->favfood is %s: him->handle.last is %s\n",him->favfood, him->handle.last); return 0; }
struct guy * him;
指针him可以指向任意现有的guy类型的结构。如果barney是一个guy类型的结构变量可以这么写
him = &barney;和数组不同,结构变量名并不是结构变量的地址,因此要在结构变量名前面加上&运算符。
指针him指向结构变量fellow[0],如何通过him获得fellow[0]的成员的值?
第一种方法:使用->运算符,该符号由一个连接号(-)后跟一个大于号组成。
如果him == &barney,那么him->income即是barney.income
换句话说指向结构的指针后面的->运算符和结构变量名后面的 .运算符工作方式相同。
这里要着重理解him是一个指针,但是him->income是该指针所指向结构的一个成员。l
第2种方法是,以这样的顺序指定结构成员的值:如果him==&fellow[0],那么*him==fellow[0],因为&和*是一对互逆运算符。因此可以做以下替代
fellow[0].income ==(*him).income
必须使用圆括号因为 .运算符比*运算符的优先级高。
总之,如果him是指向guy类型结构barney的指针,那么下面关系恒成立:
barney.income==(*him).income ==him->income//假设him== &barney
标签:成员,fellow,运算符,访问,income,guy,him,指针 来源: https://www.cnblogs.com/cyTtttt/p/16518836.html