如何在c中使用指向结构的指针读取字段? 我们考虑C:中的下面一段代码 #include <stdio.h> #define SCORES 3 typedef struct struct_student{ char name[16]; float scores[SCORES]; float average; } STUDENT; int main(){ STUDENT student, *p; int i; p = &student; printf("Name:\n"); gets((*p).name); for(i=0;i<SCORES;i++){ printf("score:\n"); scanf("%f", &(*p).scores[i] ); (*p).average = (*p).average + (*p).scores[i]; } (*p).average = (*p).average/SCORES ; printf("%s has average %f\n",student.name, student.average); return 0; }
我是说。这似乎过于复杂了。我想知道是否有另一种使用“点符号”的方法。也就是说,我知道有一种更简单的“箭头符号”。但我认为,即使使用“点符号”,也有更好的方法来做到这一点。请注意,我试图理解如何使用“点表示法”,因此我对使用“箭头表示法”的解决方案不感兴趣。更隐秘的代码并不能产生更好的代码。如果出于某种奇怪的原因,想要避免如何在c中使用指向结构的指针读取字段? 我们考虑C:中的下面一段代码 #include <stdio.h> #define SCORES 3 typedef struct struct_student{ char name[16]; float scores[SCORES]; float average; } STUDENT; int main(){ STUDENT student, *p; int i; p = &student; printf("Name:\n"); gets((*p).name); for(i=0;i<SCORES;i++){ printf("score:\n"); scanf("%f", &(*p).scores[i] ); (*p).average = (*p).average + (*p).scores[i]; } (*p).average = (*p).average/SCORES ; printf("%s has average %f\n",student.name, student.average); return 0; },c,pointers,struct,C,Pointers,Struct,我是说。这似乎过于复杂了。我想知道是否有另一种使用“点符号”的方法。也就是说,我知道有一种更简单的“箭头符号”。但我认为,即使使用“点符号”,也有更好的方法来做到这一点。请注意,我试图理解如何使用“点表示法”,因此我对使用“箭头表示法”的解决方案不感兴趣。更隐秘的代码并不能产生更好的代码。如果出于某种奇怪的原因,想要避免->,那么(*p).scores+i。无关,摆脱get用法。它是如此邪恶,它被从标准库中删除是有充分理由的。欢迎使用堆栈溢出!与您的问题无关,但永远不要使用get函数。它是,甚至
->
,那么(*p).scores+i
。无关,摆脱get
用法。它是如此邪恶,它被从标准库中删除是有充分理由的。欢迎使用堆栈溢出!与您的问题无关,但永远不要使用get
函数。它是,甚至已经从C规范中删除。改为使用例如…,这样您就可以输入一个包含空格的名称,例如Da Silva
,但需要换行符。有一种更好的方法,但是您通过引入不必要的指针使点表示法变得更难<代码>扫描频率(“%f”)和学生分数[i]代码>&(*p).scores[i])
==>p->scores+i
。更隐秘的代码并不能产生更好的代码。如果出于某种奇怪的原因,想要避免->
,那么(*p).scores+i
。无关,摆脱get
用法。它是如此邪恶,它被从标准库中删除是有充分理由的。欢迎使用堆栈溢出!与您的问题无关,但永远不要使用get
函数。它是,甚至已经从C规范中删除。改为使用例如…,这样您就可以输入一个包含空格的名称,例如Da Silva
,但需要换行符。有一种更好的方法,但是您通过引入不必要的指针使点表示法变得更难<代码>扫描频率(“%f”)和学生分数[i]代码>
scanf("%f", &(*p).scores[i] );