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

C++中如何用&引用字符串变量?关于&在字符串中用法的困惑

关于C++中&在字符串场景下的用法解析

嘿,这个问题其实很典型,核心是搞清楚地址运算符&的作用和cout针对不同类型的重载行为,我来给你拆解明白:

两段代码的核心差异

先看你给出的两段代码:

代码1:输出单个字符

#include <iostream>
using namespace std;
int main() {
    char st[]="This is a Sample String";
    cout<<st[0];
    return 0;
}

这里的st[0]是直接访问字符数组的第一个元素,它的类型是char。cout遇到char类型时,会直接输出这个字符对应的ASCII值,所以结果是T。

代码2:输出整个字符串

#include <iostream>
using namespace std;
int main() {
    char st[]="This is a Sample String";
    cout<<&st[0];
    return 0;
}

这里的&是地址运算符(不是你提到的引用哦,引用是另一种场景下的用法),它的作用是获取st[0]这个字符的内存地址,所以&st[0]的类型是char*(指向char的指针)。

而cout对char*类型有专门的重载逻辑:它会把这个指针当成C风格字符串的起始地址,从这个地址开始逐个输出字符,直到遇到字符串结束符\0(你的字符串末尾会自动隐式添加这个结束符),所以就输出了整个字符串This is a Sample String。

额外补充:数组名的隐式转换

其实你还可以简化代码2的写法——在C++中,字符数组的名字st本身会被隐式转换成指向首元素的指针,所以cout << st;和cout << &st[0];的效果完全一致,都会输出整个字符串。

如果想让代码2输出内存地址而不是字符串,你可以把char*强制转换成void*:

cout << (void*)&st[0];

这样cout就会输出&st[0]对应的内存地址值,而不是解析成字符串了。

区分&的两种用法

你提到的引用是&的另一种用法(比如函数参数void func(int& x)),那是引用运算符,用来创建变量的别名;而这里的&是地址运算符,用来获取变量的内存地址,二者是完全不同的语法,不要混淆哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:34:50