gpt4 book ai didi

c - 如何理解这个指向C中数据结构的指针?

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

我有这段代码,我想弄清楚第二行代码的作用。

static int table [][4]= {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
int valore = *(*(table+2)+1);
printf("%d",valore);

我对 C 中的指针有基本的了解,你能解释一下第二行代码的作用吗?

最佳答案

您的 只是一个二维整数数组。在 C 中,二维数组实际上是一个“数组或数组”。您的 table 的尺寸为 static in table[3][4];(3 行 x 4 列),它是一个由 3 个整数数组组成的数组,每个数组有 4 个元素.由于它是一个数组,所有值在内存中都是连续的。你可以这样想内存布局。

            +---+---+---+---+
table[0] | 1 | 2 | 3 | 4 |
+---+---+---+---+
table[1] | 2 | 3 | 4 | 5 |
+---+---+---+---+
table[2] | 3 | 4 | 5 | 6 |
+---+---+---+---+

数组在访问时转换为指针(在 4 种有限情况下接受,此处不相关,详情请参阅 C11 Standard - 6.3.2.1 Other Operands - Lvalues, arrays, and function designators(p3))

问题中向您介绍了“指针表示法”。您可以使用“数组索引”或“指针表示法”访问数组的任何元素。在指针表示法中,*(a + b) 等同于数组索引表示法中的a[b]。你有:

*(*(table+2)+1)

如果你一 block 一 block 地看*(table + 2)就是table[2]。接下来 *(table[2] + 1) 就是 table[2][1]。因此,您正在使用任一方法访问第 3 行中的第 2 个值(即 4)。

检查一下,如果您还有其他问题,请告诉我。

关于c - 如何理解这个指向C中数据结构的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54080668/

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