Arrays C语言中向指针衰减的二维数组
这是一个延伸的问题,由“一些程序员都德”在这个论坛上的回答。 引用回答者的话Arrays C语言中向指针衰减的二维数组,arrays,pointers,2d,Arrays,Pointers,2d,这是一个延伸的问题,由“一些程序员都德”在这个论坛上的回答。 引用回答者的话 &s[0][0]。这是int*类型 &s[0]。这是int(*)类型[2] s[0]。这将衰减为指向s[0]中第一个元素的指针,并等于1 美国。这将衰减为指向s中第一个元素的指针,等于2 &美国。指向数组的指针,类型为int(*)[4][2] 我不明白为什么3等于1,4等于2 我以为3等于2,4等于5 例如,S(0)将给出S(0)的地址,因为它是一个数组,因此s[[5]=& s[0 ] .让我们看一下你的2D数组,并
例如,S(0)将给出S(0)的地址,因为它是一个数组,因此s[[5]=& s[0 ] .
让我们看一下你的2D数组,并考虑你所问的各种变量的类型:int s[4][2] = {
{1234,56},
{1212,13},
{1434,80},
{1312,78}
};
现在:
是一个整数的2D数组s
,s[0]
等都是int数组s[1]
s
的第一个元素是什么?它是整个数组s[0]
由于s[0]
是一个数组,因此它相当于它的第一个元素的地址。数组s[0]
的第一个元素是什么?它是ints[0][0]
。因此,由于在表达式中使用的数组名s[0]
的值等于数组第一个元素的地址,即到s[0][0]
,因此我们有:
s[0] == &s[0][0]
这就是为什么你所引用的答案中的(3)等同于(1)
类似地,s
相当于&s[0]
。在表达式中使用时,数组名s
衰减为指向整个数组的指针s[0]
;作为指向两个int
元素数组的指针,其类型为int(*)[2]
。它的值是&s[0]
的地址,即整个数组的地址(不仅仅是第一个元素的地址)。这就是为什么(4)等同于(2)
正如“某个程序员伙计”在回答原始问题的图表中所示,这些不同的指针可能指向内存中的相同位置,但在语义上它们是完全不同的
希望这有帮助 你基本上是在说“指向一个数量的指针等于所说的质量”。这有意义吗?