You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:41:56