首页 > 编程笔记

C++字符串指针(指向字符串的指针)

在 C++ 程序中,字符串可以存储在字符数组中,我们可以用指针访问数组,自然也就可以用指针访问字符串。

字符串指针本质是一个 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

推荐阅读