【问题标题】:Getting an error in my function that returns values in an array using pointers in C在我的函数中出现错误,该函数使用 C 中的指针返回数组中的值
【发布时间】:2011-11-08 01:13:58
【问题描述】:

我正在尝试在 C 中学习数组和指针。我正在尝试在函数中编写一个程序:从用户那里获取 2 个数字,将它们放入一个数组中,然后将它们返回给主函数。我收到一个错误,我不明白问题出在哪里。这是我的代码:

#include<stdio.h>

void get_nums(float *x)
{
    float num1, num2;

    printf("enter two numbers: ");
    scanf("%f %f", &num1, &num2);

    *x[0] = num1;
    *x[1] = num2;

}

main(){

    float x[2];
    float (*p_x)[2] = &x;

    get_nums(p_x[2]);

    printf("Number 1: %f\nNumber 2: %f", x[0], x[1]);

    return 0;
}

这两行出现错误

    *x[0] = num1;
    *x[1] = num2;

错误信息是

错误:'*' 的操作数必须是指针

我看不出有什么问题。有人看到问题了吗?

编辑:我将 2 行更改为

    x[0] = num1;
    x[1] = num2;

现在我可以运行程序了。但是,输入两个数字后出现新错误。错误信息是:

  Unhandled exception at 0x40e00000 in arraysandpointers.exe: 0xC0000005: Access violation.

【问题讨论】:

    标签: c arrays function pointers


    【解决方案1】:

    您不需要*。这很好:

    x[0] = num1;
    x[1] = num2;
    

    在您的原始代码中,x[0] 已经是 float 类型。 *x[0] 将尝试尊重它——这是不可能的,因为 x[0] 不是指针。因此它无法编译。

    编辑:还将您的主要内容更改为:

    int main(){
    
        float x[2];
        get_nums(x);
    
        printf("Number 1: %f\nNumber 2: %f", x[0], x[1]);
    
        return 0;
    }
    

    没有必要拥有p_x。这就是导致崩溃的原因。

    【讨论】:

    • 这行得通,但是我现在遇到了一个新错误。输入两个数字后,我收到错误消息:“arrayandpointers.exe 中 0x40e00000 处的未处理异常:0xC0000005:访问冲突。”
    【解决方案2】:

    *X 可以被视为X 的数组,如X[]。所以当你写成*X[0] 时,它被认为是一个二维数组。所以去掉X[0]X[1]中的指针。

    删除这两行:

    float (*p_x)[2] = &x;
    get_nums(p_x[2]);
    

    你可以直接get_nums(x)

    【讨论】:

      猜你喜欢
      • 2018-03-07
      • 2014-08-16
      • 1970-01-01
      • 2015-08-05
      • 2015-08-07
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多