我最近在阅读 T*
和 T[size]
之间的区别,T 是类型,这让我很好奇,所以我在玩弄它。
int main()
{
int a[10];
using int10arrayPtr_t = int(*)[10];
int10arrayPtr_t acopy = a;
}
在上面的代码中,int10array_t acopy = a;
是带有错误信息的
error C2440: 'initializing':
cannot convert from 'int [10]' to 'int10array_t'
然后编译:
int main()
{
int a[10];
using int10arrayPtr_t = int*;
int10arrayPtr_t acopy = a;
}
类型 int(*)[10]
不是更接近 int a[10];
的类型而不是 int*
吗?那么为什么它不允许第一种情况呢?
最佳答案
您需要明确地获取地址,例如
int10arrayPtr_t acopy = &a; // acopy is a pointer to array containing 10 ints
// ^
第二种情况有效,因为数组可以 decay指向指针,对于 a
,它可以隐式转换为 int*
,而 acopy
是指向 int
的指针(请注意,它不是指向数组的指针)。
关于c++ - 了解数组和指针之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71660090/