const char* 指向字符串数组和字符串的区别
const char*
可以指向单个字符串常量,也可以指向字符串数组(即指针数组),它们有以下区别:
1. 指向单个字符串常量
const char* str = "Hello World";
- 指向一个以 null 结尾的字符数组(字符串)
- 内存布局:
'H' 'e' 'l' 'l' 'o' ' ' 'W' 'o' 'r' 'l' 'd' '\0'
- 只能访问这一个字符串
2. 指向字符串数组(指针数组)
const char* strs[] = {"Hello", "World", "C++"};
const char** p = strs; // 指向字符串数组
- 指向一个数组,数组的每个元素都是
const char*
(即每个元素指向一个字符串) - 内存布局:
strs[0]
→"Hello\0"
strs[1]
→"World\0"
strs[2]
→"C++\0"
- 可以访问多个字符串
主要区别
特性 | 指向单个字符串 | 指向字符串数组 |
声明方式 |
|
|
指向内容 | 一个字符串 | 多个字符串的指针数组 |
访问方式 | 直接使用指针 | 需要通过索引访问元素 |
内存布局 | 连续字符+null终止符 | 多个指针,每个指向一个字符串 |
示例代码
#include <stdio.h>int main() {// 指向单个字符串const char* singleStr = "Hello";printf("Single string: %s\n", singleStr);// 指向字符串数组const char* strArray[] = {"Apple", "Banana", "Cherry"};const char** ptrToArray = strArray;printf("String array:\n");for(int i = 0; i < 3; i++) {printf("%d: %s\n", i, ptrToArray[i]);}return 0;
}