在c++中,基本数据类型直接取地址赋值给指针就没问题, 但是数组对象取地址赋值给指针就会报错,这是为啥呀?
int i = 10;
int * pi = &i; // 这样不报错
int i1[2] ={100,1};
int * p_i1 = &i1; // 这样会报错,为什么?
在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 作为指针
望采纳,谢谢