这不应该被认为是双指针吗?

问题描述 投票:0回答:1

我是一名 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);
}

我尝试去掉“&”,但这样做时出现分段错误。 保留“&”,代码可以正常工作。

c pointers scanf function-pointers
1个回答
1
投票

在函数

read
中,参数
k
是指向您的结构体的指针。
当使用
k->avg
时,你就得到了浮动。
然而,函数
scanf
需要一个指向浮点数的指针。
&k->avg
这对你有用。
写下
&(k->avg)
会让整个内容更具可读性。

© www.soinside.com 2019 - 2024. All rights reserved.