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");
需要注意的是,结构体指针需要在使用前进行判空,以避免出现空指针异常。
附图:
结构体变量直接用‘->'
创建指针指向结构体变量后使用’->‘
如有不同看法或发现我的错误,欢迎评论,共同进步。