gpt4 book ai didi

c - C语言中,(数组名)和&(数组名)有什么区别?

转载 作者:行者123 更新时间:2023-12-02 20:43:50 24 4
gpt4 key购买 nike

int main() {
int arr[3] = { 1,3,5 };
int * ptr1 = arr;
int * ptr2 = &arr; // warning C4047: reference level between int * and int (*)[3] is different
return 0;
}

我知道' arr ' 表示具有数组起始地址值' arr 的指针'。而且,它是一个不可变的指针值。那么,这个想法不就是'&arr吗? '是指针'arr的地址', 正确的?

最佳答案

是的,但类型不同。

对于定义如下的数组

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

对于大多数情况,arr 衰减为指向数组中第一个元素的指针,在本例中,该元素的类型为 int *。所以,对于声明

int * ptr1 = arr;

LHS 和 RHS 类型相同。

另一方面,&arr是一个指向3个int数组的指针,换句话说,它的类型是int (*)[3 ]。说起来

int * ptr2 = &arr; 

您正尝试将其分配给int *。它们不是兼容的类型。因此发出警告。

关于c - C语言中,(数组名)和&(数组名)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54069870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com