在C语言中,使用结构体的时候 "->" 和 “." 有什么区别,越详细越好,谢谢?

如题所述

貌似没有区别。

有几种访问结构体的方法:
访问结构成员的运算符有两种,一种是结构成员运算符“·”,也称为“圆点运算符”,另一种是结构指针运算符“->”,也称“箭头运算符”。
结构成员运算符通过结构变量名访问结构体的成员。例如:
printf("%s",student.name);
结构指针运算符由减号“-”和“>”组成(中间没有空格),它通过指向结构的指针访问结构的成员。假定声明了指向struct student的指针sPtr,并且把结构student1的地址赋给了sPtr,如下列语句通过指针sPtr打印了结构student1的成员name:
printf("%s",sPtr->name);
不要在结构指针运算符的-和>之间插入空格。
在用指针和结构成员运算符引用结构成员时一定要用圆括号(*sPtr).name,因为结构成员运算符“.”比指针复引用运算符“*”的优先级高,所以圆括号是必须的。
下面的程序演示了结构成员和结构指针运算符的用法:
#include<stdio.h>
struct student
{char *name;
char *sex;
};
main()
{
struct student student1;
struct student *sPtr;
student1.name="Tom";
student1.sex="male";
sPtr=&student1;
printf("%s%s%s\n%s%s%s\n%s%s%s\n",
student1.name,"'s sex is",student1.sex,
sPtr->name,"'s sex is",sPtr->sex,
(*sPtr).name,"'s sex is",(*sPter).sex);
return 0;
}

参考资料:http://www.englishfree.com.cn/schoolfree/cn/computer/text/c/012-03.htm

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-31

定义的结构体如果是指针,访问成员时就用->

如果定义的是结构体变量,访问成员时就用.

指针引用任何变量都是这样引用的 ,规定的

我忘了 Ex = {10,99}; 这样的初始化是否合法了,如果合法的话,那就是编译器做了工作,把 

Ex = {10,99}; 转换成了 (*Ex.a) = 10;Ex.b = 99;

结构体成员运算符。

->指针运算符。

1、如果结构体中的成员均为一般变量(包括结构体变量),则使用“.”,如果成员变量为指针(不管指向什么,包括结构体),则使用“->”。

2、如果定义了结构体数组指针,则可分别使用“.”和“->”,区别在于指针带下标时,以是数组形式访问,此时用“.”,如果不带下标(或使用偏移),此时用“->”。

本回答被网友采纳
第2个回答  推荐于2017-11-23
定义的结构体如果是指针,访问成员时就用->
如果定义的是结构体变量,访问成员时就用.

例如:
struct AAA {
int a;
char b;
};

struct AAA q; 访问成员就用:q.a;
struct AAA *p; 访问成员就用:p->a;本回答被提问者采纳
第3个回答  2012-03-16
在C语言中,使用结构体的时候 "->" 和 “."
Struct ABC//声明一个Struct ABC的为结构体类型
{ //结构体类型中的元素
Int a;
Char b;
Char c[20];
};
Struct ABC abc;//定义一个Struct ABC类型的变量abc
Struct ABC *P;//定义一个Struct ABC类型的指针变量p

P=&abc;//将结构体变量abc的地址赋给指针变量p

//***是你要给变量赋的值
//下面三种方法都行!!!
//结构体变量abc后跟点.
abc.a=***;
abc.b=***;
abc.c=***;
//指针p是结构体变量abc的地址,后跟->
p->a=***;
p->b=***;
p->c=***;

//注意,括号不能省略,因为点.的优先级高于星号*
//(*p)相当于结构体变量,后跟点.
(*p).a=***;
(*p).b=***;
(*p).c=***;
第4个回答  2010-09-13
这个没必要详细,一说你就明白.
结构体变量用点;结构体变量的指针用箭头.
你应该知道箭头本身就是用于指针
相似回答