C++字符串指针(指向字符串的指针)
在 C++ 程序中,字符串可以存储在字符数组中,我们可以用指针访问数组,自然也就可以用指针访问字符串。
字符串指针本质是一个 char 类型的指针,然后将它指向一个字符串的开头,即字符串中的第一个字符。
例如:
举个简单的例子:
例如:
字符串指针本质是一个 char 类型的指针,然后将它指向一个字符串的开头,即字符串中的第一个字符。
字符串指针的定义
用指针指向字符串,和指向数组没有什么区别,要么在定义指针后给指针赋值,要么在定义时就初始化。例如:
char str[] = "http://c.biancheng.net"; char* p = str;//初始化字符指针,令其指向 str 数组中的字符串 char* q; // 定义一个字符指针 q = str; // 令其指向字符串的开头实际场景中,我们还会经常见到如下定义的字符串指针:
char *p = "http://c.biancheng.net";字符串“Hello World!”存放在内存中的常量区,指针 p 指向常量区中的这个字符串。
注意,常量区的内容是不允许修改的,因此对于上面定义的字符串 "http://c.biancheng.net",不可以通过指针 p 修改它。
字符串指针的使用
借助字符串指针,我们可以灵活地操作它指向的字符串。1) 访问单个字符
通过下标或者解引用加偏移的方式,可以访问字符串中的特定字符。举个简单的例子:
char str[] = "http://c.biancheng.net"; char* strPtr = str; // 初始化字符串指针,令其指向 str char character1 = strPtr[3]; // 通过下标的方式访问字符串 char character2 = *(strPtr + 3); // 通过解引用加偏移的方式访问字符串
2) 遍历字符串
使用指针和循环结构可以很方便地遍历整个字符串。例如:char str[] = "http://c.biancheng.net"; char* strPtr = str; // 初始化字符串指针,令其指向 str for (; *strPtr != '\0'; strPtr++) { std::cout << *strPtr; }这个循环将遍历整个字符串,直到遇到空字符 '\0' 结束。
3) 作为函数参数
字符串指针可以被用作函数的参数,这使得在不同函数之间传递字符串变得非常方便:例如:
#include <iostream> void displayString(const char* url) { std::cout << "字符串内容: " << url << std::endl; } int main() { char url[] = "http://c.biancheng.net"; displayString(url); return 0; }输出结果为:
字符串内容: http://c.biancheng.net
实例演示
以下是一个完整的示例,展示了如何使用字符串指针定义、初始化和操作字符串:#include <iostream> void printLength(const char* str); int main() { char greeting[] = "http://C.biancheng.net"; char* strPtr = greeting; std::cout << "字符串内容: " << strPtr << std::endl; // 通过指针修改字符数组 strPtr[7] = 'c'; std::cout << "修改后的字符串: " << strPtr << std::endl; // 通过指针计算字符串长度 printLength(strPtr); return 0; } void printLength(const char* str) { int length = 0; while (*str++ != '\0') { length++; } std::cout << "字符串长度: " << length << std::endl; }运行结果为:
字符串内容: http://C.biancheng.net
修改后的字符串: http://c.biancheng.net
字符串长度: 22