c++这样写为什么会报错?

在c++中,基本数据类型直接取地址赋值给指针就没问题, 但是数组对象取地址赋值给指针就会报错,这是为啥呀?

  
    int i = 10;
    int * pi = &i; // 这样不报错

    
    int i1[2] ={100,1};
    int * p_i1 = &i1;  // 这样会报错,为什么?

在C++中,数组名被视为指向数组首元素的指针,因此可以在某些情况下将数组名视为指针来使用。但是,数组名本身并不是指针类型,它只是一个常量指针(也称为数组指针),指向数组首元素的地址。因此,在将数组名取地址时,需要使用取地址运算符 &。

在你的代码中,当你尝试将数组名 i1 直接赋值给指针 p_i1 时,编译器会发出错误,因为数组名 i1 不是指针类型,不能直接赋值给指针变量。正确的写法是使用取地址运算符 &,将数组首元素的地址赋值给指针变量 p_i1,如下所示:

int i1[2] = {100,1};
int* p_i1 = &i1[0];  // 或者使用 int* p_i1 = i1;

或者可以使用数组名 i1 直接作为指针使用,因为数组名被视为指向数组首元素的指针:


int i1[2] = {100,1};
int* p_i1 = i1;  // 直接使用数组名 i1 作为指针

望采纳,谢谢

因为类型不匹配。p_i1的类型是int *,而“&l1”的类型是int(*)[2],把“&”去掉。

因为i1本身也是个一级指针,指向数组的地址
而p_i1也是个一级指针,它俩是同一级别的
int * p_i1 = i1;
这样才对
如果你需要一个指针指向数组指针本身的地址,那你需要一个二级指针
但是这样做没有意义,因为数组是一种特殊的指针,它的值本来就是它的地址,你再搞个指针指向它自身的地址没用
而且数组指针是只读的,你搞个指针指向它的地址也不能修改它