【问题标题】:Trouble passing data into a pointer in C [closed]无法将数据传递到C中的指针[关闭]
【发布时间】:2026-02-02 03:50:01
【问题描述】:

我正在尝试创建一个函数,它将总共 3 个考试相加,将它们除以 4,然后将它们乘以 0.4,并将结果数字传递回指针。我不确定哪个行号是问题或我在这里缺少什么。

我是 C 编码新手,也是 Stack Overflow 新手。

void calcExams(void)
{
    int i;
    float examTotal;
    float *calcExams;
    float oneExam;
    for (i = 0; i > 3;)
    {
        printf("\n Enter an exam grade: ");
        scanf("%f", oneExam);
        examTotal = examTotal + oneExam;
        *calcExams = examTotal / 4 * .4;   
    }
}

【问题讨论】:

    标签: c function pointers


    【解决方案1】:

    问题一:

    正如名字所暗示的,指针应该指向某个地方,指向某个有效的内存位置,正如你所拥有的,它未初始化,它没有指向任何地方,或者更准确地说,指向某个随机内存由声明时存储在其中的任何剩余值给出的位置,通过取消引用指针访问这样的内存位置等于undefined behavior

    也就是说,您的指针必须在使用前进行初始化,无论是通过内存分配还是以其他方式使其指向某个有效变量:

    #include <stdlib.h>
    //...
    float *calcExams = malloc(sizeof *calcExams);
    

    或者:

    float some_variable;
    float *calcExams = &some_variable;
    

    问题 2:

    scanf 期望存储输入值的变量的地址作为参数,但是您按值传递此变量,您需要:

    scanf("%f", &oneExam);
                ^
    

    【讨论】:

    • 话虽如此,除了函数的可变参数之外,实际上没有理由拥有一个指向一个值的指针。