【发布时间】:2019-04-29 04:14:22
【问题描述】:
在以下数组中:
float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}};
我不确定以下表达式的类型和值是什么:
"*mat"
"mat[0]"
"**mat"
"**(mat+1)"
当我尝试运行它时,它总是输出地址。我现在有点迷茫,不知道对不对。
【问题讨论】:
在以下数组中:
float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}};
我不确定以下表达式的类型和值是什么:
"*mat"
"mat[0]"
"**mat"
"**(mat+1)"
当我尝试运行它时,它总是输出地址。我现在有点迷茫,不知道对不对。
【问题讨论】:
你有一个二维数组mat。
*mat 和mat[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
前两个值是数组的地址,你的值可以不同,但它们必须相等。
【讨论】: