[英]Is the address of an array equal to its first element in C
假設這個數組:
int arr[5] = { 1, 2, 3, 4, 5 };
這里arr
有兩個用途——它是數組的名稱,它充當指向數組中第一個元素的指針,因此默認情況下arr
等於&arr[0]
。
我的問題是, &arr
呢? 這也等於上面的嗎?
數組實際上是內存的一個范圍。 因此,范圍的地址是該范圍中存儲的數組及其第一個元素的地址。
因此,在具有罕見異常的表達式中使用的數組指示符被轉換為指向其第一個元素的指針。
使用您提供的示例
int arr[5] = { 1, 2, 3, 4, 5 };
這些表達式&arr
和&arr[0]
具有相同的值但類型不同。
表達式&arr
的類型為int( * )[5]
而表達式&a[0]
的類型為int *
。
這是一個演示程序。
#include <stdio.h>
int main(void)
{
int arr[5] = { 1, 2, 3, 4, 5 };
printf( "&arr == &arr[0] is %s\n",
( void * )&arr == ( void * )&arr[0] ? "true" : "false" );
printf( "sizeof( *&arr ) = %zu\n", sizeof( *&arr ) );
printf( "sizeof( *&arr[0] ) = %zu\n", sizeof( *&arr[0] ) );
return 0;
}
它的輸出是
&arr == &arr[0] is true
sizeof( *&arr ) = 20
sizeof( *&arr[0] ) = 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.