飞道的博客

C语言中.与->的区别

193人阅读  评论(0)

首先他们两个是有区别的。

看如下程序:在学习结构体方面的知识是注意到.与->了。在之前的意识中,两个没多大的差别。
看下程序,分析下为什么,有时候用.有时候用->?
其实要讨论这两者的区别,就涉及到了结构体指针与结构体变量来访问成员变量的问题了。

#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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场