huzeyu 发表于 2020-3-27 21:21:37

关于C语言数组指针问题

#include <stdio.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; (*p) != '\0'; j++)
                {
                        printf("%c ", (*p));
                }
                printf("\n");
      }

      return 0;
}

请问为什么这段代码中,在定义数组指针的时候,会多出一个*号。这个星号在这里是做什么用的?

BngThea 发表于 2020-3-27 21:31:09

百度一下 指针数组 和 数组指针
因为array数组每个元素本身是一个字符串,需要一个指针来寻址,所以array是一个全是指针的数组,所以array的地址需要加一层*

4goodworld 发表于 2020-3-27 21:45:42

char* array
char* (*p)
你把定义书写成这样子,会不会更容易理解点
array与 (*p) 等价 一个指针指向一个5个成员的数组
但你发现,这个数组的类型竟然是char* 类型
这个是什么意思
就是一个数组里面的元素都是指针,这是什么情况呢?
最容易出现的就是 字符串数组咯

sunrise085 发表于 2020-3-27 22:06:22

array是一个数组指针,有5个元素,每个元素指向一个数组,即后面的五个字符串;
array本身就是指针,所以指向array的就是指针的指针,所以就需要定义char *(*p)
而array又是一个二维数组,所以他的指针就需要定义成数组指针,这就有了char*(*p)

huzeyu 发表于 2020-3-28 16:57:28

找到一个更容易理解的解释

int *(*p(int)); -- 杂从 p 开始,先与 () 结合, 说明 p 是一个函数, 然后进入 () 里面, 与 int 结合, 说明函数有一个整型变量参数, 然后再与外面的 * 结合, 说明函数返回的是一个指针, 然后到最外面一层, 先与[]结合, 说明返回的指针指向的是一个数组, 然后再与 * 结合, 说明数组里的元素是指针, 然后再与 int 结合, 说明指针指向的内容是整型数据。所以 p 是一个参数为一个整数据且返回一个指向由整型指针变量组成的数组的指针变量的函数。

页: [1]
查看完整版本: 关于C语言数组指针问题