char*[]与char**
时间: 2023-03-31 17:02:23 浏览: 61
char*[]和char**都是指向字符指针的指针,但是它们的声明方式不同。char*[]是一个字符指针数组,它的声明方式类似于char* arr[],表示arr是一个字符指针数组。而char**是一个指向字符指针的指针,它的声明方式类似于char** p,表示p是一个指向字符指针的指针。在使用时,char*[]可以通过下标访问数组元素,而char**需要通过间接引用来访问指针指向的字符指针。
相关问题
char*与const char*
char*和const char*都是指向字符数组的指针,但是它们之间有一些重要的区别。char*指针可以用于修改指向的字符数组,而const char*指针则不能修改指向的字符数组。
下面是一个例子,演示了char*和const char*之间的区别:
```c++
#include <iostream>
#include <cstring>
int main() {
char str1[] = "Hello";
char* ptr1 = str1;
std::cout << "Before modification: " << ptr1 << std::endl;
ptr1[0] = 'h';
std::cout << "After modification: " << ptr1 << std::endl;
const char* str2 = "World";
const char* ptr2 = str2;
std::cout << "Before modification: " << ptr2 << std::endl;
// 下面这行代码会导致编译错误
// ptr2[0] = 'w';
std::cout << "After modification: " << ptr2 << std::endl;
return 0;
}
```
输出结果为:
```
Before modification: Hello
After modification: hello
Before modification: World
After modification: World
```
可以看到,通过char*指针可以修改指向的字符数组,而通过const char*指针则不能修改指向的字符数组。
char **与char*[]
char **和char*[]都是指向字符指针的指针,但它们在使用时有一些细微的差别。char*[]是一个字符指针数组,它是一个连续的内存块,每个元素都是一个字符指针,可以通过下标访问每个元素。而char **是一个指向字符指针的指针,它不一定是一个连续的内存块,每个元素都是一个字符指针,需要通过指针操作来访问每个元素。
下面是一个char*[]的例子:
```c
char* arr[] = {"apple", "banana", "orange"};
for(int i=0; i<3; i++){
printf("%s\n", arr[i]);
}
```
下面是一个char **的例子:
```c
char a = 'x';
char* b = &a;char** c = &b;
printf("%c\n", **c);
```