是数组的地址等于它在C中的第一个元素

问题描述 投票:0回答:1

假设此数组:

int arr[5] = { 1, 2, 3, 4, 5 };

[这里arr有两个用途-它是数组的名称,并且充当指向数组中第一个元素的指针,因此arr默认情况下等于&arr[0]

我的问题是,&arr如何?这也等于上面的吗?

c arrays pointers sizeof implicit-conversion
1个回答
0
投票

数组实际上是内存的范围。因此,扩展区的地址就是该扩展区中存储的数组及其第一个元素的地址。]

结果,在表达式中使用的具有极少数异常的数组指示符将转换为指向其第一个元素的指针。

使用您提供的示例

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
© www.soinside.com 2019 - 2024. All rights reserved.