gpt4 book ai didi

c - 指向整数数组的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:44 25 4
gpt4 key购买 nike

假设 mat 是一个指向大小为 5 的数组的指针,其中每个元素都是一个整数

int (*mat)[5];

我已经将它初始化为

int a[5] = {5, 4, 3, 2, 1};
mat = &a;

我把代码写成

#include <stdio.h>

int main()
{
int (*mat)[5];
int a[5] = {5, 4, 3, 2, 1};
mat = &a;
printf("%p\n%p\n%d\n", mat, *mat, **mat);
return 0;
}

输出:

43800  
43800
5

为什么 mat*mat 给出相同的答案?

最佳答案

图片可能有帮助:

     +---+            +---+
mat: | | ------> a: | 5 | a[0]
+---+ +---+
| 4 | a[1]
+---+
...
+---+
| 1 | a[4]
+---+

所以,我们首先注意到 - 数组 a 的地址与数组元素的地址相同a[0] . 表达式 a类型为“int 的 5 元素数组”;除非该表达式是 sizeof 的操作数或一元 &运算符,它被转换(“衰减”)为“指向 int 的指针”类型的表达式,表达式的值是数组第一个元素的地址。因此,表达式 &a , a , 和 &a[0]都将产生相同的(a 的第一个元素的地址),即使它们的类型 不完全相同(int (*)[5]int *int *)。

因此,鉴于上述情况,以下所有内容都是正确的:

  mat == &a 
*mat == a
**mat == a[0]

&aa评估相同的地址,mat*mat评估为相同的值。

关于c - 指向整数数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51752017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com