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][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数组,并考虑你所问的各种变量的类型:

    int s[4][2] = {
        {1234,56},
        {1212,13},
        {1434,80},
        {1312,78}
      };
    
    现在:

    • s
      是一个整数的2D数组
    • s[0]
      s[1]
      等都是int数组
    你的问题是:

    放置s[0]将给出s[0]的地址,因为它是一个数组,因此 s[0]=&s[0]

    这是不对的。在表达式中使用时,数组的名称衰减为指向数组第一个元素的指针。
    s
    的第一个元素是什么?它是整个数组
    s[0]

    由于
    s[0]
    是一个数组,因此它相当于它的第一个元素的地址。数组
    s[0]
    的第一个元素是什么?它是int
    s[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)

    正如“某个程序员伙计”在回答原始问题的图表中所示,这些不同的指针可能指向内存中的相同位置,但在语义上它们是完全不同的


    希望这有帮助

    你基本上是在说“指向一个数量的指针等于所说的质量”。这有意义吗?