【发布时间】:2021-06-02 03:43:45
【问题描述】:
我有一个由 5 个整数组成的数组。 arr 和 &arr 是相同的地址。 那么为什么数字 2 给出编译错误,而 3 工作正常。
int arr[5] = {1,2,3,4,5};
1. int *p = arr;
2. int (*p1)[5] = arr //Compilation Error
3. int (*p1)[5] = &arr; //Works fine.
arr = 0x61fdf0 and &arr= 0x61fdf0
【问题讨论】:
-
arr衰减为int*。&arr的类型为int (*)[5]。所以类型检查做得很好。 -
arr和&arr是同一个地址,但不是同一种类型。 -
你能解释一下这在 C 和 C++ 中有什么不同吗?在我看来,这在 c 和 c++ 中是一样的
-
C 中没有错误,这有区别:godbolt.org/z/hf5PKK
-
它只是 c 给出警告。和 c++ 错误..所以两者都解释这是错误的,所以我认为标签没有错,任何知道 c ,c++ 的人都可以解释它..所以没有语言标签垃圾邮件的基础..
标签: c++ c pointers implicit-conversion explicit-conversion