标题:结构体指针访问结构体成员
只看楼主
数据总线
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2018-3-14
结帖率:33.33%
已结贴  问题点数:20 回复次数:1 
结构体指针访问结构体成员
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


typedef struct
{
    char a;
    int b;
    float c;
}struct_A_s;

typedef struct
{
    char a;
    int b;
    struct_A_s obj;
    float c;
}struct_B_s;


struct_B_s sObj =
{
    10,
    1000,
    .obj.a = 10,
    .obj.b = 1000,
    .obj.c = 0.1,
    9.99
};

int    main()
{
   struct_B_s *p = &sObj;

    printf("a=%d\n",p->a);
    printf("a=%d\n",p->b);
    printf("obj-a=%d\n",p->obj->a);//可不可这样子访问
    printf("obj-b=%d\n",p->obj->b);//可不可这样子访问
    printf("obj-c=%.2lf\n",p->obj->c);//可不可这样子访问
    return 0;
}
搜索更多相关主题的帖子: printf include obj 访问 结构体 
2021-10-11 09:09
自由而无用
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:61
专家分:1456
注 册:2021-8-9
得分:10 
//online parser: https://www.bccn.net/run/
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char a;
    int b;
    float c;
}struct_A_s;

typedef struct
{
    char a;
    int b;
    struct_A_s obj;
    float c;
}struct_B_s;


struct_B_s sObj =
{
    10,
    1000,
    .obj.a = 10,
    .obj.b = 1000,
    .obj.c = 0.1,
    9.99
};

int main(int argc, char *argv[])
{
    struct_B_s *p = &sObj;

    printf("a = %d\n", p->a);
    printf("a = %d\n", p->b);
    printf("obj-a[mem] = %d, obj-a[ptr] = %d\n", p->obj.a, (&p->obj)->a);
    printf("obj-b[mem] = %d, obj-b[ptr] = %d\n", p->obj.b, (&p->obj)->b);
    printf("obj-c[mem] = %.2lf, obj-c[ptr] = %.2lf\n", p->obj.c, (&p->obj)->c);

    return 0;
}


output sample:
a = 10
a = 1000
obj-a[mem] = 10, obj-a[ptr] = 10
obj-b[mem] = 1000, obj-b[ptr] = 1000
obj-c[mem] = 0.10, obj-c[ptr] = 0.10
2021-10-11 09:31
apull
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:10 
printf("obj-a=%d\n",p->obj->a);//可不可这样子访问
printf("obj-b=%d\n",p->obj->b);//可不可这样子访问
printf("obj-c=%.2lf\n",p->obj->c);//可不可这样子访问

上面3中不能访问。
p是指针,所以用->,而p->obj里的obj不是指针,所以不能用->进行访问,要用.访问。
改成下面方式即可。
printf("obj-a=%d\n",p->obj.a);
printf("obj-b=%d\n",p->obj.b);
printf("obj-c=%.2lf\n",p->obj.c);
2021-10-12 23:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507115-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.261369 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved