为啥string指针直接cout 指针会出现他的地址而char指针cout是存储的全部内容
时间: 2024-08-12 15:07:26 浏览: 22
在C++中,`std::string` 和 `char` 的指针行为存在差异,主要是由于它们的数据存储和内存管理的不同。
1. `std::string` 指针:当你使用 `std::string` 指针并尝试用 `cout` 输出时,`cout` 默认会试图调用 `std::string` 类型的 `operator<<` 运算符重载来处理字符串对象。但是,`std::string` 指针实际上只存储了字符串的起始地址(即指向内存中存储的字符数组的指针),所以输出的是指针本身的地址,而不是字符串的内容。如果你想显示字符串内容,你需要使用 `->c_str()` 或 `*ptr`(`ptr` 是 `std::string` 指针)来获取实际的字符数组,并传递给 `cout`。
2. `char` 指针:`char` 指针直接指向的是字符数组或单个字符,`cout` 在没有特别指定的情况下会默认解析这些指针指向的内容。因此,当你输出 `char` 指针时,`cout` 会打印出指针所指向的字节值,如果它是一个有效的ASCII字符,可能就是显示字符本身,如果是非打印字符或地址,就可能是乱码或地址值。
相关问题
指针地址stringstream
根据提供的引用内容,stringstream是C++中的一个类,用于进行流的输入、输出和输入输出操作。如果要从stringstream的开头开始读取数据,可以使用seekg方法将指针移动到开头的位置。具体来说,可以使用tellg方法获取当前指针位置,再使用seekg方法将指针移动到开头的位置,如下所示:
```c++
#include <iostream>
#include <sstream>
int main() {
std::stringstream ss("Hello, world!");
std::cout << "Current pointer position: " << ss.tellg() << std::endl; // 输出:Current pointer position: 0
ss.seekg(0);
char c;
while (ss >> c) {
std::cout << c;
}
return 0;
}
```
上述代码中,我们首先创建了一个stringstream对象ss,并将其初始化为"Hello, world!"。然后使用tellg方法获取当前指针位置,并输出到控制台。接着使用seekg方法将指针移动到开头的位置。最后使用while循环从stringstream中读取字符,并输出到控制台。运行上述代码,输出结果为"Hello, world!"。
c++编写函数,通过指针一个将字符串反向。 函数首部为: void ReverseString(char *s)
下面是一个简单的 C++ 函数,通过指针将字符串反向:
```c++
#include <iostream>
#include <cstring>
void ReverseString(char* s) {
int len = strlen(s);
int i = 0, j = len - 1;
while (i < j) {
std::swap(s[i], s[j]);
i++;
j--;
}
}
int main() {
char s[] = "hello, world";
std::cout << "Before reverse: " << s << std::endl;
ReverseString(s);
std::cout << "After reverse: " << s << std::endl;
return 0;
}
```
函数的主要思路是使用两个指针 `i` 和 `j`,分别指向字符串的开头和结尾。然后不断交换字符,直到 `i` 大于等于 `j`。这个函数可以很好地处理包括空字符串在内的任何字符串。