这里有一段示例代码。我相信数组是一个地址,而*array是这个地址上的值。
int array[7][7];
array == *array
但我发现array和*array是相同的。这是怎么回事?
这里有一段示例代码。我相信数组是一个地址,而*array是这个地址上的值。
int array[7][7];
array == *array
但我发现array和*array是相同的。这是怎么回事?
在这里
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
arr
、arr[0]
和 arr[0][0]
的地址都相同,即 arr
和 *arr
的地址相同。
多维数组的一个元素是一个数组,很多情况下会衰减为指向其第一个元素的指针。
因此,在这两种情况下,您都有一个指向内存中相同位置的指针。
在C语言中,它们在技术上并不相同,因为它们指向不同的对象,但是因为这些对象具有相同的地址,并且因为大多数实现将所有指针存储在相同的格式中,它们恰好相等。
没有类型就没有值。
123456789
就像这样什么都不是;你需要知道它是整数、双精度浮点数、指针等等...
所以,我喜欢把它看作是一对 (value, type)
。
而那个 value 可以是 (123456789, int)
,或者是 (123456789, double)
,或者是 (123456789, char*)
,... 这些都是不同的对(有相同的值)。
在你的情况下,你有 (<address>, char(*)[7])
,与 (<address>, char*)
不同。
array == *array
是一种类型错误。 - melpomene[]
:array == array[0]
,这与您的表达式完全等效。 - alx - recommends codidact