C语言中.与->的区别

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

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

#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语言–“.”与“->”有什么区别?

大家对照学习。

  • 12
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值