'=':无法从'int(*)[5]'转换为'int *'

时间:2016-12-05 14:53:49

标签: c++ c++11 pointers visual-c++ c++14

#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的地址,它本身就是一个指向数组基本元素的指针。

1 个答案:

答案 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 *

没有从一个指针类型到另一个指针类型的隐式转换。所以编译器发出错误。