C 用(.)或→;操作人员
伙计们,我对C中的->操作符有点困惑,有人能给我解释一下它是如何工作的,它是如何使用的,以及点和点之间的主要区别吗。运算符和->运算符,此运算符->的名称是什么 另外,我非常需要理解这一点,为了完成一个练习,请解释我或嘲笑我,pdf,视频,教程或其他帮助我的东西,谢谢C 用(.)或→;操作人员,c,struct,operator-keyword,C,Struct,Operator Keyword,伙计们,我对C中的->操作符有点困惑,有人能给我解释一下它是如何工作的,它是如何使用的,以及点和点之间的主要区别吗。运算符和->运算符,此运算符->的名称是什么 另外,我非常需要理解这一点,为了完成一个练习,请解释我或嘲笑我,pdf,视频,教程或其他帮助我的东西,谢谢 int main(int argc, char *argv[]) { struct dashboard{ char name[20]; int idade; }; struct dashboard
int main(int argc, char *argv[]) {
struct dashboard{
char name[20];
int idade;
};
struct dashboard user;
char* n = strcpy(user.name, "anyname");
user.idade = 10;
printf("Name is: %s and age is: %d", n, user.idade);
return 0;}
如何使用->实现相同的结构
在各位成员的帮助下回答我的问题
int main(int argc, char *argv[]) {
struct dashboard{
char name[20];
int idade;
};
struct dashboard *user, u;
//Referencing pointer to memory address of u
user = &u;
char* n = strcpy(user->name, "anyname");
user->idade = 10;
printf("Name is: %s, Age is: %d", n, user->idade);
return 0;
}点用于结构实例(对象),而->是在使用指针访问结构时使用的。例如,
obj.member
和ptr_obj->member
点用于结构实例(对象),当您使用指针访问结构时->为。例如,obj.member
和ptr\u obj->member
dot选择结构的成员。箭头取消引用指向结构的指针,然后拾取成员
struct dashboard user, *up = &user;
. . . user.name . . .
. . . up->name . . .
是等效的(假设向上静止指向用户)。点拾取结构的成员。箭头取消引用指向结构的指针,然后拾取成员
struct dashboard user, *up = &user;
. . . user.name . . .
. . . up->name . . .
是等效的(假设向上仍然指向用户)。
结构。field
是结构上的字段,很简单<代码>结构->字段相当于(*结构)。字段
<代码>->当您想要访问指针指向的结构字段时,可以使用它。假设你有这样的结构:
typedef struct example{
int field1;
int field2;
} ExStructure;
这些变量是:
ExStructure a, *b;
您有一个结构和一个指向结构的指针。如果要访问第一个结构中的字段,只需执行
X=a.field1
。但第二个是指向结构的指针,因此要访问该结构的field1,您需要执行X=(*b).field1
,这相当于X=b->field1
。因此->
使代码更易于阅读 结构。field
是结构上的字段,很简单<代码>结构->字段相当于(*结构)。字段
<代码>->当您想要访问指针指向的结构字段时,可以使用它。假设你有这样的结构:
typedef struct example{
int field1;
int field2;
} ExStructure;
这些变量是:
ExStructure a, *b;
您有一个结构和一个指向结构的指针。如果要访问第一个结构中的字段,只需执行
X=a.field1
。但第二个是指向结构的指针,因此要访问该结构的field1,您需要执行X=(*b).field1
,这相当于X=b->field1
。因此->
使代码更易于阅读 ->
操作符有点缺少名称。C++调用它:代码>运算符> >代码>,但维基百科称之为“结构引用引用”。->
操作符有点缺少名称。C++调用它:代码>运算符> >代码>,但维基百科称之为“结构引用引用”。那么,这个代码是正确的?结构仪表板{char name[20];int-idade;};结构仪表板*用户;用户->idade;用户->名称;嗯,不,因为在尝试取消引用之前,你不会让“用户”指向任何东西。您仍然需要为结构实际分配内存。那么,这段代码正确吗?结构仪表板{char name[20];int-idade;};结构仪表板*用户;用户->idade;用户->名称;嗯,不,因为在尝试取消引用之前,你不会让“用户”指向任何东西。您仍然需要为结构实际分配内存。我遵循您的示例,但编译器不起作用,我不确定我是否做错了什么,但在我看来,您缺少了一些额外的解释!因为当我试图用指针*b访问field1时,IDE冻结了。@超级用户我非常怀疑IDE冻结了。好吧,这个例子只是为了说明区别。当您尝试将其作为程序运行时,它可能会冻结(我想您正在windows中工作),因为它会产生分段错误。您必须使用malloc为*b
分配内存:b=malloc(sizeof(ExStructure))代码>。请记住,您正在声明指向结构(*b)的指针,但它尚未指向任何内存位置。您也可以让b指向a,然后尝试访问b上的字段,但如果您希望它们是两个不同的结构,则必须使用malloc。@immibis Yes it freeze,因为我没有引用或分配指向指针的内存,您可以使用另一种方法,引用指向另一个地址的指针来访问内存,就像Lee Daniel Crocker所做的那样,不管怎样,这太麻烦了!我遵循您的示例,但编译器不起作用,我不确定我是否做错了什么,但在我看来,您缺少了一些额外的解释!因为当我试图用指针*b访问field1时,IDE冻结了。@超级用户我非常怀疑IDE冻结了。好吧,这个例子只是为了说明区别。当您尝试将其作为程序运行时,它可能会冻结(我想您正在windows中工作),因为它会产生分段错误。您必须使用malloc为*b
分配内存:b=malloc(sizeof(ExStructure))代码>。请记住,您正在声明指向结构(*b)的指针,但它尚未指向任何内存位置。您也可以让b指向a,然后尝试访问b上的字段,但如果您希望它们是两个不同的结构,则必须使用malloc。@immibis Yes it freeze,因为我没有引用或分配指向指针的内存,您可以使用另一种方法,引用指向另一个地址的指针来访问内存,就像Lee Daniel Crocker所做的那样,不管怎样,这太麻烦了!