char (*p)[]和char *p[]的区别
时间: 2023-08-29 15:07:37 浏览: 31
`char (*p)[]` 是一个指向字符数组的指针,它指向一个未知大小的字符数组,可以用来表示一个字符二维数组。而 `char *p[]` 是一个指向字符指针的数组,每个元素是一个字符指针,可以用来表示一个字符串数组。
例如,假设有以下定义:
```
char arr[3][4] = { "abc", "def", "ghi" };
char *p[] = { "abc", "def", "ghi" };
```
我们可以声明以下两个指针:
```
char (*ptr1)[4] = arr; // ptr1是一个指向字符数组的指针,指向arr数组的首地址
char **ptr2 = p; // ptr2是一个指向字符指针的指针,指向p数组的首地址
```
`ptr1` 指向的是 `arr` 数组的第一个元素,也就是 `"abc"`,而 `ptr2` 指向的是 `p` 数组的第一个元素,也就是 `"abc"` 字符串的地址。
因此,`char (*p)[]` 和 `char *p[]` 的含义和用途是不同的。
相关问题
char* *p char *p
char *p是一个指针,指向一个字符类型的变量或字符串的首地址。而char **p是一个指向指针的指针,即指向一个指针变量的地址。
在引用中提到的char *p和char **p是用来表示字符串的首地址或指针的。char *p可以用来表示一个字符串的首地址,而char **p则可以用来表示一个指向指针的指针。
在引用中列举了一些可能的组合,它们都是关于指向字符串或指针的指针的类型。这些组合中包括了char *const p,它表示一个指向常量字符的指针变量,即指针指向的字符不能被修改。还有char const**p,它表示一个指向指向常量字符的指针的指针。
在引用中给出了一些例子,它们展示了不同类型的指针之间的初始化是否合法。例如,char **p1;const char**p2=p1是不合法的,因为指向指针的指针和指向常量指针的指针之间是不兼容的。
综上所述,char *p是一个指向字符串的首地址的指针,而char **p是一个指向指针的指针。
char *p和char(*p)
char *p和char(*p)都是指针类型,但是它们的含义不同。char *p是一个指向字符型数据的指针,而char(*p)是一个字符型数组。
char *p可以用来指向一个字符型变量或者一个字符型数组的首地址,也可以用来指向一个字符串常量。例如:
```
char c = 'a';
char str[] = "hello";
char *p1 = &c;
char *p2 = str;
char *p3 = "world";
```
而char(*p)是一个字符型数组,它可以用来定义一个字符型数组变量,例如:
```
char str[10];
char (*p)[10] = &str;
```
这里定义了一个大小为10的字符型数组str,并定义了一个指向该数组的指针p。