首先他们两个是有区别的。
看如下程序:在学习结构体方面的知识是注意到.与->了。在之前的意识中,两个没多大的差别。
看下程序,分析下为什么,有时候用.有时候用->?
其实要讨论这两者的区别,就涉及到了结构体指针与结构体变量来访问成员变量的问题了。
#include <stdio.h>
#include <stdlib.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()
{
//学会结构数组的初始化
struct guy fellow[2] =
{
{
{"Ewen","Yang"},
"grilled sa",
"personality coach",
68112.0
},
{
{"Ewen","Wen"},
"grilledddd sa",
"personality coac123h",
48112.0
}
};
struct guy * him;//定义一个结构体指针
printf("address #1: %p #2 %p\n",&fellow[0],&fellow[1]);
him = &fellow[0];
printf("address #1: %p #2 %p\n",him,him+1);
printf("him->income is: %.2f:(*him).income) is %.2f\n",him->income, (*him).income );
printf("him->favfood is %s: him-handle.last is %s\n",him->favfood,him->handle.last);
// printf("Hello world!\n");
return 0;
}
程序输出如下:
2.用指针访问成员:
在上边的程序中 him指向了fellow[0],如何通过him获得fellow[0]的成员变量值呢?
方法一:
也是最常用的方法:使用->运算符。如果我们有如下关系:
如果him == &barney(假设barney是一个guy的结构体变量),那么him->income即是barney.income。
如果him ==&fellow[0],那么him->income即是fellow[0].income。
那么就是说:指向结构的指针后边的->运算符和结构变量名后边的.运算符工作方式相同(不能写成him.income。因为him不是结构名)
这里要着重理解:him是一个指针,但是him->income是该指针所指向结构的一个成员。所以,在该程序中,him->income是一个float类型的变量。
方法二:
以这样的顺序指定结构成员的值:
如果him == &fellow[0], 那么 him == fellow[0],因为&和是一对逆运算符。因此,可以做以下替代:
fellow[0].income == (him).income;
必须要使用圆括号,因为.的优先级高于。*
在放一个将这个区别的博文:C语言–“.”与“->”有什么区别?
大家对照学习。
转载:https://blog.csdn.net/Naunyang/article/details/116560881