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

C++中无法通过临时指针修改目标指针值的技术问题

问题原因及解决方法

问题原因

  • 当i=1或i=2时,x = me/x = con是把me/con的当前值(nullptr)拷贝给临时指针x,后续x = new A这类操作只是修改了x自己的指向,和原始的me/con没有任何关联,自然无法改变它们的值。
  • 当i=0时,x = &ba是让x指向ba这个指针变量(此时x的类型是LOAI**),但后续x = new A是把LOAI*类型的地址赋值给LOAI**类型的x,这属于类型不匹配的错误,编译器应该会给出警告或报错;就算强行编译,也只是修改了x本身的存储值,并没有修改ba的指向。

解决方法

要修改原始指针的指向,需要通过指针的指针或者指针的引用来操作,以下是两种可行方案:

方案1:使用指针的指针(LOAI**)

LOAI* ba = nullptr;
LOAI* me = nullptr;
LOAI* con = nullptr;

for (int i = 0; i < 3; ++i) {
    LOAI** x = nullptr;
    if (i == 0)      x = &ba;
    else if (i == 1) x = &me;
    else if (i == 2) x = &con;

    int loai;
    cin >> loai;

    if (loai == 1)      *x = new A;
    else if (loai == 2) *x = new B;
    else if (loai == 3) *x = new AB;
    else if (loai == 4) *x = new O;
}

这里x是指向原始指针的指针,通过*x就能直接修改ba/me/con的指向。

方案2:使用指针的引用(LOAI*&)

LOAI* ba = nullptr;
LOAI* me = nullptr;
LOAI* con = nullptr;

for (int i = 0; i < 3; ++i) {
    LOAI*& x = (i == 0) ? ba : (i == 1) ? me : con;

    int loai;
    cin >> loai;

    if (loai == 1)      x = new A;
    else if (loai == 2) x = new B;
    else if (loai == 3) x = new AB;
    else if (loai == 4) x = new O;
}

这里x是原始指针的引用,对x的赋值直接等价于对ba/me/con的赋值,逻辑更直观。

注意:使用new分配内存后,记得在合适的地方用delete释放,避免内存泄漏。

内容的提问来源于stack exchange,提问作者KhiTuKi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:04:53