其他分享
首页 > 其他分享> > 用指针访问成员

用指针访问成员

作者:互联网

//使用指向结构的指针
#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