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
相关产品推荐
相关产品推荐

