非const指针在C++中是否禁止重定义?代码报错疑问
问题解析与解决方案
你遇到的错误和C++版本无关,核心是混淆了指针重新赋值(改变指向)和重复声明变量的区别:
- 你写的
int *p_int_data{&other_int_data};是在同一个作用域(main函数内)再次声明了同名变量p_int_data,这违反了C++的变量声明规则——同一个作用域内不能重复定义同名变量,不管变量类型是不是指针、是不是const。 - 教程说的“非const指针可以重新指向其他变量地址”,指的是赋值操作,不是再次声明。正确的写法是去掉声明部分的
int *,直接给已存在的指针变量赋值。
修正后的代码:
#include <iostream> int main() { int int_data {33}; int other_int_data =110; int *p_int_data= &int_data; // 重新指向其他变量地址:赋值操作,不需要再声明类型 p_int_data = &other_int_data; std::cout << *p_int_data << std::endl; // 输出110,验证指向已改变 return 0; }
另外补充下const指针的相关规则,避免混淆:
int *const p = &int_data;:这是指针本身不可变的const指针,一旦初始化后就不能再重新指向其他地址,强行赋值会报错。const int *p = &int_data;:这是指向的内容不可变的指针,指针本身可以重新指向其他变量地址,只是不能通过指针修改指向的内容。
内容的提问来源于stack exchange,提问作者Abhijit Saha
相关产品推荐
相关产品推荐

