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

为什么不能将数组名作为指针引用传递?C++编译报错问题求解

问题核心原因

你遇到的编译错误本质是数组类型与指针类型的差异 + 右值无法绑定非const左值引用两个规则共同导致的:

  1. 你定义的char long_txt[] = "twas\n\nbrillig..."是char[N]类型的数组变量,而非char*类型的指针变量。数组名确实会在传参等场景下隐式退化为指向数组首元素的指针,但这个退化生成的是一个临时的指针值,属于右值,没有可修改的内存空间。
  2. 你的get_line第一个参数声明为char *&txt,是char*类型的非const左值引用,要求必须传入一个可修改的char*左值变量(也就是有明确内存地址、可以被赋值的指针变量)。临时右值显然不符合这个要求,所以编译器报错。

额外提醒:就算没有编译错误,你也不能修改数组名本身的值——数组的首地址是固定的常量,不支持自增、赋值操作,你原本想通过传数组名来移动读取指针的逻辑本身就是不成立的。

修复方案

你只需要额外声明一个独立的char*指针变量指向数组首地址,把这个指针传给get_line即可:

int main() {
    char long_txt[] = "twas\n\nbrillig\nand the\n\n\nslithy";
    int ret;
    char *dest;
    char* p_txt = long_txt; // 声明独立的可修改左值指针
    while (*p_txt) {
        ret = get_line(p_txt, dest);
        printf("%d %s %s\n", ret, dest, p_txt);
    }
}

修改后函数内部对txt的自增操作会直接作用到p_txt变量上,完全符合你设计函数时模仿std::getline移动读取位置的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:10