地址和值怎么可能相同?

3

这里有一段示例代码。我相信数组是一个地址,而*array是这个地址上的值。

int array[7][7];
 array == *array

但我发现array和*array是相同的。这是怎么回事?


2
array == *array 是一种类型错误。 - melpomene
更倾向于使用数组的自然运算符[]array == array[0],这与您的表达式完全等效。 - alx - recommends codidact
3个回答

3

在这里

int arr[7][7];
arr 是一个包含 7 个一维数组二维数组,每个一维数组都包含 7 个元素。它的样子像是:
arr[0][0] arr[0][1] arr[0][2] arr[0][3] arr[0][4] arr[0][5] arr[0][6] arr[0][7]  
   |         |          |         |         |         |        |          |     | ....|
    ----------------------------------------------------------------------       -----
  (0x100)                           |                                              |
                                 arr[0] (0x100)                                   arr[1]   ... arr[6]
                                    |                                              |
                                    -----------------------------------------------
                                                          |
                                                         arr(0x100) -assume base address is 0x100

arrarr[0]arr[0][0] 的地址都相同,即 arr*arr 的地址相同。


1

多维数组的一个元素是一个数组,很多情况下会衰减为指向其第一个元素的指针。

因此,在这两种情况下,您都有一个指向内存中相同位置的指针。

在C语言中,它们在技术上并不相同,因为它们指向不同的对象,但是因为这些对象具有相同的地址,并且因为大多数实现将所有指针存储在相同的格式中,它们恰好相等。


1

没有类型就没有值。

123456789 就像这样什么都不是;你需要知道它是整数、双精度浮点数、指针等等...

所以,我喜欢把它看作是一对 (value, type)
而那个 value 可以是 (123456789, int),或者是 (123456789, double),或者是 (123456789, char*),... 这些都是不同的对(有相同的值)。

在你的情况下,你有 (<address>, char(*)[7]) (<address>, char*) 不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接