c++字符串指针传参
时间: 2025-05-03 20:45:40 浏览: 39
### C++ 中通过指针传递字符串参数
在 C++ 中,可以通过指针将字符串作为参数传递给函数。由于 C 风格的字符串是以字符数组的形式存储,并以 `\0` 结尾表示结束位置,因此可以利用字符指针 `char*` 来处理这些字符串。
#### 字符串作为指针参数的示例代码
以下是一个简单的例子,展示如何使用指针传递字符串并对其进行修改:
```cpp
#include <iostream>
using namespace std;
// 函数定义:接受一个 char 类型的指针作为参数
void modifyString(char* str) {
// 修改字符串的内容
for (int i = 0; str[i] != '\0'; ++i) {
str[i] = toupper(str[i]); // 将每个字符转为大写
}
}
int main() {
char myStr[] = "hello world"; // 定义一个可修改的字符串
cout << "调用函数前myStr的值: " << myStr << endl;
modifyString(myStr); // 调用函数,传递字符串
cout << "调用函数后myStr的值: " << myStr << endl;
return 0;
}
```
#### 解析
1. **字符串的本质**
在上述代码中,`char myStr[] = "hello world"` 实际上创建了一个字符数组,并将其初始化为 `"hello world\0"`[^2]。当该数组被传递到函数 `modifyString` 时,实际上是传递了它的首地址(即第一个元素的位置)。这使得函数能够直接访问和修改原始字符串中的内容。
2. **指针的作用**
函数 `modifyString` 接收的是一个指向字符的指针 `char* str`。这意味着它可以遍历整个字符串直到遇到终止符 `\0`,并对其中的每一个字符进行操作。在这个例子中,我们使用标准库函数 `toupper()` 将所有字母转换成大写字母[^3]。
3. **注意事项**
- 如果希望保护原字符串不被修改,则应考虑使用常量指针 `const char*` 或者复制一份新的字符串副本再进行修改。
- 对于不可变字符串字面量(如 `"hello world"`),尝试对其内容进行修改会导致未定义行为,因为它们通常位于只读内存区域[^1]。
---
### 常见错误及解决方案
如果试图像下面这样编写程序:
```cpp
void modifyString(const char* str);
...
modifyString("hello");
```
则会出现编译器警告或运行时崩溃,原因是字符串字面量本身是不可更改的对象,任何企图改变的行为都是非法的。
为了安全起见,在实际开发过程中推荐如下做法之一:
- 创建动态分配的空间;
- 使用 STL 提供的数据结构如 `std::string` 替代裸指针管理方式;
---
阅读全文
相关推荐



















