#include <iostream>
using namespace std;
int main()
{
int x[] = { 1 ,2 ,3 ,4 ,5 };
int *ptr;
ptr = &x;
return 0;
}
编译器告诉我'=':无法从'int(*)[5]'转换为'int *'。这是什么意思?我不明白的部分是ptr
作为一个指针总能存储x的地址,它本身就是一个指向数组基本元素的指针。
答案 0 :(得分:4)
变量x的类型是int[5]
。 &amp;应用于此变量的运算符是指向类型为int[5]
的对象的指针。
您可以通过以下方式想象有效声明
typedef int T[5];
T x = { 1, 2, 3, 4, 5 };
T *ptr = &x;
另一方面,你可以写
typedef int U;
U x[5] = { 1, 2, 3, 4, 5 };
U *ptr = x;
正如您所看到的,T和U是不同的类型,相应地T *
和U *
也是不同的类型。并且这些类型的对象被不同地初始化。
类型T *
对应于类型int ( * )[5]
,而类型U对应于类型int *
没有从一个指针类型到另一个指针类型的隐式转换。所以编译器发出错误。