C中数组的地址是否等于它的第一个元素
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
怎么样?这也等于上面的吗?
数组其实就是一段内存。所以一个extent的地址就是这个extent中存储的数组的地址和第一个元素的地址。
因此,表达式中使用的数组指示符被转换为指向其第一个元素的指针。
使用您提供的示例
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
假设这个数组:
int arr[5] = { 1, 2, 3, 4, 5 };
这里的 arr
有两个用途 - 它是数组的名称,它充当指向数组中第一个元素的指针,因此 arr
等于 &arr[0]
默认。
我的问题是,&arr
怎么样?这也等于上面的吗?
数组其实就是一段内存。所以一个extent的地址就是这个extent中存储的数组的地址和第一个元素的地址。
因此,表达式中使用的数组指示符被转换为指向其第一个元素的指针。
使用您提供的示例
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