|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请问:
数组指针 指向的是指针类型数组,为什么不是最外面多加一个*取址符号呢
如
我的理解是:跟指向int型数组一样 --> *(*(p+i)+j)-->再取一次址
-->
如下:
而正确的是:
这里为什么要先
*p 呢
有人嘛嘛,帮帮我
完整程序如下:
- #include <stdio.h>
- int main()
- {
- char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};
- char *(*p)[5] = &array;
- int i, j;
- for (i = 0; i < 5; i++)
- {
- for (j = 0; *(*(*p + i) + j) != '\0'; j++)
- {
- printf("%c ", *(*(*p + i) + j));
- }
- printf("\n");
- }
- return 0;
- }
复制代码
本帖最后由 风过无痕1989 于 2020-12-14 16:20 编辑
对指针数组和数组指针的区别,示例代码如下所示:
int *array[5]; // 定义一个指针数组
int (*arr)[5]; // 定义一个数组指针
首先,对于语句“int *array[5]”,因为“[]”的优先级要比“*”要高,所以 array 先与“[]”结合,构成一个数组的定义,数组名为 array,而“int *”修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,它是一个指针数组。
其次,对于语句“int(*arr)[5]”,“()”的优先级比“[]”高,“*”号和 arr 构成一个指针的定义,指针变量名为 arr,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,arr 是一个指针,它指向一个包含 5 个 int 类型数据的数组,很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。
对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。
比较下面的例子,此例子与求助的程序输出结果完全相同,只是求助的程序,定义的是一个指针数组,而下面的程序定义的是一个数组指针,故而,求助的例子会多一个 * 号
- #include <stdio.h>
- int main()
- {
- char array[5][6] = { "FishC", "Five", "Star", "Good", "WoW" };
- char (*p)[6] = array;
- int i, j;
- for (i = 0; i < 5; i++)
- {
- for (j = 0; *(*(p + i) + j) != '\0'; j++)
- {
- printf("%c ", *(*(p + i) + j));
- }
- printf("\n");
- }
- return 0;
- }
复制代码
为了方便比较,我还是将上面的例子移下来:
- #include <stdio.h>
- int main()
- {
- char *array[5] = {"FishC", "Five", "Star", "Good", "WoW"};
- char *(*p)[5] = &array;
- int i, j;
- for (i = 0; i < 5; i++)
- {
- for (j = 0; *(*(*p + i) + j) != '\0'; j++)
- {
- printf("%c ", *(*(*p + i) + j));
- }
- printf("\n");
- }
- return 0;
- }
复制代码
|
|