鱼C论坛

 找回密码
 立即注册
查看: 2695|回复: 7

这个是什么?

[复制链接]
发表于 2018-8-1 14:43:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char *(*p)[5] = &array;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-8-1 14:48:34 | 显示全部楼层
array是一个数组吧。
那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针。
你把它指向了一个数组。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 15:33:32 | 显示全部楼层
无符号整形 发表于 2018-8-1 14:48
array是一个数组吧。
那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针。
你把它指 ...

这是全部代码
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char *array[5] = {"FishC", "Five", "Star", "Good", "Wow"};
  6.         char *(*p)[5] = &array;
  7.         int i, j;

  8.         for (i = 0; i < 5; i++)
  9.         {
  10.                 for (j = 0; j < 5; j++)
  11.                 {
  12.                         if (i > strlen((*p)[j]) - 1)
  13.                         {
  14.                                 break;
  15.                         }
  16.                         printf("%c ", (*p)[j][i]);
  17.                 }
  18.                 printf("\n");
  19.         }

  20.         return 0;
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 15:35:07 | 显示全部楼层

那么那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针(包含指针的数组array的每一个元素(它们是指针))。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-1 15:41:48 | 显示全部楼层
无符号整形 发表于 2018-8-1 15:35
那么那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针(包含指针的数组array的每一 ...

为什么这样就不行呢
(*p)[5] = &array
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 15:48:26 | 显示全部楼层
向上的蜗牛 发表于 2018-8-1 15:41
为什么这样就不行呢
(*p)[5] = &array

因为array是一个指针,它指向一个数组,然而那个(*p)[5]却是指向一个包含5个数据(每一个数据不是指针)的数组。
然而*(*p)[5]是一个指向一个包含(5个内容)都是指向指针的数组。(注意这里是1个数组,5个内容!!)
是不是很绕口……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-1 21:46:29 | 显示全部楼层
本帖最后由 zqianglh 于 2018-8-3 23:31 编辑

char array[5] 字符数组
char *array[5] 指针数组
char (*p)[5] 指针p指向字符数组
char *(*p)[5] 指针p指向指针数组

或许你问的是这个 字符串怎么能保存在指针里!
C语言 语法允许指针数组(类似一个2级指针 指针-->char )直接用数组指针存储char
指针数组常用于指向不同长度的字符串,这样处理字符串方便些。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-3 02:03:44 From FishC Mobile | 显示全部楼层
char *(*p)[5]=&array;
好像已经解决了,我来答一下我的理解~
这里涉及到符号的优先级~
本来*的优先级小于[]的,没括号应该是p[5]。
但因为*在括号内。所以,*p代表一个指针,然后再与[5]结合,变成(*p)[5],即一个指针,指向一个具有5个元素的整形数组~读p是数组的指针
最后再与*结合,取值~*(*p)[5]
而&array是取地址的值,
char *(*p)[5]=&array;指将array的值赋值给char *(*p)[5]~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表