【问题标题】:get Value from Pointer Array - Call By Reference从指针数组中获取值 - 通过引用调用
【发布时间】:2019-03-13 10:04:27
【问题描述】:

我想从函数中的引用中获取值。 我的功能是:

void print2D_A(double (*ary2D)[3][4]){ ... }

主要:

double ary2D[3][4] = {
                        {10.1, 11.2, 12.3, 13.4},
                        {20.1, 21.2, 22.3, 23.4},
                        {30.1, 31.2, 32.3, 33.4}
                     };
print2D_A(&ary2D);

获取函数中的第一个值:

*(ary2D)+1

【问题讨论】:

  • 不要直接使用指针运算,正确使用数组索引。这将使您的代码更清晰,更易于阅读和理解。正如您在previous question 中提到的,不要将指针传递给数组(它非常很少需要)。
  • 问题出在哪里?
  • 好的,如果我在函数中写:cout
  • 至于如何解决我认为您的问题,请记住 C 没有“2d”数组。您在这里拥有的是一个 数组 数组。为了帮助您了解它们的工作原理,我建议您将其画在一张纸上,然后用箭头画出指向不同位置的指针。
  • 问题是,我得到的是地址而不是值..

标签: c arrays function 2d


【解决方案1】:

不要用二维数组的地址,实在看不懂。

void print2D_A(double ary2D[3][4])    // `ary2D` is already a pointer of array, seems like `douible* ary2D`
{
    printf("%f\n", ary2D[0][0]);
}

编辑:

void print2D_B(double ary2D[3][4])    // `ary2D` is already a pointer of array, seems like `douible* ary2D`
{
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<4; j++)
        {
            printf("%f, ", ary2D[i][j]);
        }
        printf("\n");
    }
}
int main(int argc, char *argv[])
{
    double ary2D[3][4] = {
        { 10.1, 11.2, 12.3, 13.4 },
        { 20.1, 21.2, 22.3, 23.4 },
        { 30.1, 31.2, 32.3, 33.4 }
    };
    print2D_A(ary2D);    // In fact, this is a pointer of double array
    return 0;
}

【讨论】:

  • 惯用的声明更多的是void print2D_A(double ary2D[][4]),因为二维数组将衰减指向一维数组的指针。
  • 首先,感谢您的回答。我怎样才能以这种方式调用该函数? print2D_A(&ary2D);我必须如何更改函数中的 printf??
  • @Fkcm95 我又在想为什么?还是好奇吗?即使在您从上一个问题中得到的 cmets 和答案之后?数组就是数组,数组就是数组,它是double 的数组,还是doublearrays 数组并不重要。语义和行为是一样的。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 2020-12-16
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多