char **与char*[]
时间: 2023-12-04 15:39:21 浏览: 22
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);
```
相关问题
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* 变量的地址。以下是一个示例代码:
```c
#include <stdio.h>
int main() {
char* str = "Hello, world!";
char** strPtr = &str;
printf("str: %s\n", str);
printf("strPtr: %s\n", *strPtr);
return 0;
}
```
在上面的示例中,我们声明了一个 char* 变量 `str`,它指向字符串 "Hello, world!" 的地址。然后我们创建了一个 char** 变量 `strPtr`,并将其赋值为 `&str`,这样 `strPtr` 就指向了 `str` 的地址。通过 `*strPtr`,我们可以访问 `str` 中存储的字符串。
输出结果将是:
```
str: Hello, world!
strPtr: Hello, world!
```
这样,我们就成功地将 char* 转换为 char**。