我是一名 C 程序员新手,我有一个可能很简单的问题。 我目前正在学习如何使用指向结构的指针,但我不明白为什么下面的第 20 或 22 行可以工作。 我知道 scanf() 要求您提供要为其赋值的变量的地址。但由于这个 scanf() 放置在一个以结构体指针作为参数的函数范围内,为什么“&k->avg”不被视为双指针? 如果将这些值级联通过,前面提到的不就等于“&&s->avg”吗?
// Online C compiler to run C program online
#include <stdio.h>
#include <stdint.h>
#include <stdio.h>
struct student {
float avg;
int roll;
};
void read(struct student *);
void display(struct student *);
void main() {
struct student s;
read(&s);
display(&s);
}
void read(struct student *k) {
printf("Enter the average of the student : ");
scanf("%f", &k->avg);
printf("Enter the roll number of the student : ");
scanf("%d", &k->roll);
}
void display(struct student *k) {
printf("Given details are :\nRoll Number of the student : %d\nAverage mark of the student : %f\n", k->roll, k->avg);
}
我尝试去掉“&”,但这样做时出现分段错误。 保留“&”,代码可以正常工作。
在函数
read
中,参数k
是指向您的结构体的指针。k->avg
时,你就得到了浮动。scanf
需要一个指向浮点数的指针。&k->avg
这对你有用。&(k->avg)
会让整个内容更具可读性。