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

C++中打印字符串字符地址却输出剩余字符串的问题咨询

为什么打印字符地址却输出了剩余字符串?

嘿,我刚学指针的时候也踩过一模一样的坑!咱们来拆解下问题出在哪:

你写的&a[i]确实是指向字符串第i个字符的指针,但C++里的cout对char*类型有特殊的重载——它会默认把这个指针当成字符串的起始地址,然后从这个位置开始输出所有字符,直到遇到字符串结束符'\0'为止,这就是为什么你看到的是从对应字符开始的剩余内容,而不是地址。

那怎么让它乖乖打印地址呢?有两种简单的办法:

方法1:强制转换为void*

cout对void*类型的处理是直接打印指针的内存地址,所以我们把&a[i]强制转换成void*就行:

#include <iostream>
using namespace std;
string a = "Hello, World!";
int main() {
    for(int i=0; i<a.length();i++) {
        cout << static_cast<void*>(&a[i]) << endl;
    }
    return 0;
}

方法2:用printf输出

printf的%p格式符专门用来打印指针地址,不会有cout那种重载的问题,不过记得要包含<cstdio>头文件:

#include <iostream>
#include <cstdio>
using namespace std;
string a = "Hello, World!";
int main() {
    for(int i=0; i<a.length();i++) {
        printf("%p\n", &a[i]);
    }
    return 0;
}

本质上就是要避开cout对char*的字符串输出重载,让它按普通指针的方式处理就好啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:06