永发信息网

C语言中结构成员的引用时,'.'与'->'的区别在哪里?什么时候用’ . ',什么时候用'->'?

答案:3  悬赏:0  手机版
解决时间 2021-01-28 08:29
  • 提问者网友:皆是孤独
  • 2021-01-27 14:52
#include
struct date
{
int year;
int month;
int day;
};

struct student
{
int num;
char name[10];
struct date birthday;
};

void main()
{
int i;
struct student stu[4]={{001,"luoyi",1989,06,23}, //定义结构数组并定义
{002,"xiaoli",1990,01,27},
{003,"zengtao",1993,07,28},
{004,"chen",1991,10,23}};
struct student *p;
p=stu; //定义结构指针变量并使其指向结构数组首地址
printf("1--(下标法)学好 姓名 出生日期:\n");
for(i=0;i<4;i++)
{
printf(" %d %8s %d-%d-%d\n",(stu+i)->num,(stu+i)->name,(stu+i)->birthday.year,(stu+i)->birthday.month,(stu+i)->birthday.day);
}
printf("2--(下标法)学好 姓名 出生日期:\n");
for(i=0;i<4;i++)
{
printf(" %d %8s %d-%d-%d\n",stu[i].num,stu[i].name,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
}
printf("3--(指针法)学好 姓名 出生日期:\n");
for(i=0;i<4;i++)
{
printf(" %d %8s %d-%d-%d\n",(*(p+i)).num,(*(p+i)).name,(*(p+i)).birthday.year,(*(p+i)).birthday.month,(*(p+i)).birthday.day);
}
printf("4--(指向运算符)学好 姓名 出生日期:\n");
for(i=0;i<4;i++)
{
printf(" %d %8s %d-%d-%d\n",(p+i)->num,(p+i)->name,(p+i)->birthday.year,(p+i)->birthday.month,(p+i)->birthday.day);
}
} 在此程序中,为什么第一个下标法无法用'.'? 第二个下标法无法用‘->' ? 当嵌套时,引用嵌套里的成员,如(stu+i)->birthday.year,在birthday与year之间只能用'.'吗? 实在是有点糊涂了,请高手指教~~~

都说的太片面,没有说到点上~~~
最佳答案
  • 五星知识达人网友:撞了怀
  • 2021-01-27 15:05
通过结构体指针访问结构体成员时,使用->
例如:
struct student
{ char num[10];
char name[20];
char sex[2];
int age;
}stu;
struct student *p=&stu;
欲给结构体变量stu的age成员赋值18,有三种写法:
stu.age=18
p->age=18 等价于 (*p).age=18
后两种写法都是通过指针访问结构体的成员。
全部回答
  • 1楼网友:轮獄道
  • 2021-01-27 17:19
c语言中,所谓“引用”都是一个指针,而指针是没有具体类型的,它只是存放某个变量的内存地址,所以二者没有本质区别。 但是,在使用引用(指针)时,要根据引用的变量类型来具体而定。例如,结构变量的引用可以读取每个结构成员的值,而通过结构成员的引用只是读取该成员的值。
  • 2楼网友:旧脸谱
  • 2021-01-27 15:42
记住,通过指针获取成员时用->。 回答完毕。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯