a.data[]与a->data[]区别

a.data[]和a->data[]都是访问结构体a中的data数组的方式,但是它们的语法不同。

a.data[]是使用结构体变量a的成员运算符"."来访问结构体中的成员,其中data是结构体中的一个数组成员。

a->data[]是使用结构体指针a的箭头运算符"->"来访问结构体中的成员,其中data是结构体中的一个数组成员。在使用a->data[]时,a必须是一个指向结构体的指针。

a.data[]适用于结构体变量,而a->data[]适用于结构体指针。

当然,一些文章写 ”结构体变量和结构体指针都可以通过`.`和`->`来访问结构体成员“ 但是,如果想对结构体变量使用'->'需要创建一个结构体指针指向该结构体变量(我认为最后还是转到了结构体指针上来)。例如:(具体编译看文末附图)



struct Person p1 = {"Alice", 25};
struct Person *ptr = &p1;

printf("%s is %d years old.\n", ptr->name, ptr->age);

补充:

struct Person {
    char name[20];
    int age;
};

结构体变量是直接存储结构体类型数据的变量,它的定义方式如下:

struct Person p1 = {"Tom", 20};

结构体指针是指向结构体类型数据的指针变量,它的定义方式如下:

struct Person *p2;

结构体指针需要通过动态内存分配或者指向已经存在的结构体变量来进行初始化,例如:

p2 = (struct Person*)malloc(sizeof(struct Person));
p2->age = 20;
strcpy(p2->name, "Tom");

需要注意的是,结构体指针需要在使用前进行判空,以避免出现空指针异常。

附图:

结构体变量直接用‘->'

 创建指针指向结构体变量后使用’->‘

 如有不同看法或发现我的错误,欢迎评论,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值