【问题标题】:Getting confused with array access对数组访问感到困惑
【发布时间】:2019-04-29 04:14:22
【问题描述】:

在以下数组中:

float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}}; 

我不确定以下表达式的类型和值是什么:

"*mat"
"mat[0]"
"**mat"
"**(mat+1)"

当我尝试运行它时,它总是输出地址。我现在有点迷茫,不知道对不对。

【问题讨论】:

    标签: c arrays output


    【解决方案1】:

    你有一个二维数组mat

    *matmat[0] 相同,它们是(指向)第一个一维数组{4.0, 3.0} 的(指针)。
    mat[1] 将是指向第二个一维数组的指针。

    **mat 是第一个一维数组的第一个值:4.0

    *(mat + 1)mat[1],第二个一维数组,所以**(mat + 1) 是第二个一维数组的第一个值:2.0

    #include <stdio.h>
    
    int main(void) {
        float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}}; 
        printf("%p\n", (void*)*mat);
        printf("%p\n", (void*)mat[0]);
        printf("%f\n", **mat);
        printf("%f\n", **(mat+1));
        return 0;
    }
    

    将打印

    0x7ffc9cc9e290
    0x7ffc9cc9e290
    4.000000
    2.000000
    

    前两个值是数组的地址,你的值可以不同,但​​它们必须相等。

    https://ideone.com/xEuxgg

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2018-12-03
      • 2016-02-13
      相关资源
      最近更新 更多