c - 与数组访问混淆

标签 c arrays output

在以下数组中:

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

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

"*mat"
"mat[0]"
"**mat"
"**(mat+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

关于c - 与数组访问混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55896867/

相关文章:

python - 如何在同一行打印 2 个项目

求解稀疏方程组时的 csparse 误差

c - 无法通过年至世纪节目c中的隐藏测试

c - 指针和多维数组

c - 如何使用动态分配的任意维数组?

hadoop - 使用outputcollector映射WordCount示例

c++ - G++ 提示 "undefined reference to"而 GCC 成功

arrays - 从数组中提取一定数量的 block

javascript - 从今天开始创建最近 7 天的名称数组 - javascript

Java - 反转输出的显示方式