与数组访问混淆

时间:2019-04-29 04:14:23

标签: c arrays output

在以下数组中:

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

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

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

当我尝试运行它时,它总是输出地址。我现在有点困惑,因为我不知道这是否对。

1 个答案:

答案 0 :(得分:1)

您有一个二维数组mat

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

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

*(mat + 1)mat[1],第二个1D数组,所以**(mat + 1)是第二个1D数组的第一个值: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