向上的蜗牛 发表于 2018-8-1 14:43:42

这个是什么?

char *(*p) = &array;

无符号整形 发表于 2018-8-1 14:48:34

array是一个数组吧。
那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针。
你把它指向了一个数组。

向上的蜗牛 发表于 2018-8-1 15:33:32

无符号整形 发表于 2018-8-1 14:48
array是一个数组吧。
那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针。
你把它指 ...

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

int main()
{
      char *array = {"FishC", "Five", "Star", "Good", "Wow"};
      char *(*p) = &array;
      int i, j;

      for (i = 0; i < 5; i++)
      {
                for (j = 0; j < 5; j++)
                {
                        if (i > strlen((*p)) - 1)
                        {
                              break;
                        }
                        printf("%c ", (*p));
                }
                printf("\n");
      }

      return 0;
}

无符号整形 发表于 2018-8-1 15:35:07

向上的蜗牛 发表于 2018-8-1 15:33
这是全部代码

那么那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针(包含指针的数组array的每一个元素(它们是指针))。

向上的蜗牛 发表于 2018-8-1 15:41:48

无符号整形 发表于 2018-8-1 15:35
那么那个是一个包含指针的数组,长度为5,数组中的每一个指针都指向一个指针(包含指针的数组array的每一 ...

为什么这样就不行呢{:10_284:}
(*p) = &array

无符号整形 发表于 2018-8-1 15:48:26

向上的蜗牛 发表于 2018-8-1 15:41
为什么这样就不行呢
(*p) = &array

因为array是一个指针,它指向一个数组,然而那个(*p)却是指向一个包含5个数据(每一个数据不是指针)的数组。
然而*(*p)是一个指向一个包含(5个内容)都是指向指针的数组。(注意这里是1个数组,5个内容!!)
是不是很绕口……{:10_291:}

zqianglh 发表于 2018-8-1 21:46:29

本帖最后由 zqianglh 于 2018-8-3 23:31 编辑

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

或许你问的是这个 字符串怎么能保存在指针里!
C语言 语法允许指针数组(类似一个2级指针 指针-->char )直接用数组指针存储char
指针数组常用于指向不同长度的字符串,这样处理字符串方便些。

莓莓 发表于 2018-8-3 02:03:44

char *(*p)=&array;
好像已经解决了,我来答一下我的理解~
这里涉及到符号的优先级~
本来*的优先级小于[]的,没括号应该是p。
但因为*在括号内。所以,*p代表一个指针,然后再与结合,变成(*p),即一个指针,指向一个具有5个元素的整形数组~读p是数组的指针
最后再与*结合,取值~*(*p)
而&array是取地址的值,
char *(*p)=&array;指将array的值赋值给char *(*p)~~
页: [1]
查看完整版本: 这个是什么?