诗竹白芍 发表于 2019-1-25 10:35:14

关于指针的一些问题

#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;
}
还有就是这不是一维数组吗?然后 (*p) 这个又是啥意思呀?{:10_254:}

Croper 发表于 2019-1-25 12:16:46

首先,array本身是一个指针数组,
指针数组本身可以使用如array的形式,表示第i个指针偏移j的那个字符;
而p是指向array的类型的指针(指针数组的指针),
对p解引用,他的类型就是指针数组了,所以(*p)就是p所指向的那个指针数组的第i个指针偏移j的那个字符,
也就是arry的第i个指针偏移j的那个字符;

人造人 发表于 2019-1-25 13:06:54

C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768

文章有点长,耐心看完,你的C语言等级绝对可以上升到一个新的高度
也许你现在有好多还不理解,没关系,把它保存起来,一段时间后再去看,当你完全理解了这篇文章以后,C语言的语法部分你应该就不存在问题了

还有,学C语言至少也应该学两遍,第一遍是会用C语言,不去深入理解C语言的细节,不去理解C语言的内部实现,仅仅做到会用C语言
像一维数组,二维数组,学第一遍应该会用就行了,会在数组中存放数据,会使用数组中的数据就可以了

在学第二遍时请先停一停,先去拿到汇编语言
第二遍学C语言一定要带上汇编语言,这时就可以深入探索C语言了,这时你可以看到if,while,for这些关键字的内部实现,也就是说这些关键字做了什么,你那时一清二楚
你可以用汇编语言看C语言的数组是怎样实现的,数组内部的工作原理

你现在不应该纠结C语言的细节,应该做的会用就行了,因为你还需要再学一遍,带上汇编语言再学一遍

行客 发表于 2019-1-26 09:12:25

你可以把(*p)暂时假作为array,(*p)和array是同一地址,内存字符为字符串 "Five"的'i'

啊涂涂 发表于 2019-2-5 08:47:50

人造人 发表于 2019-1-25 13:06
C语言复杂声明解析
https://blog.csdn.net/wangweixaut061/article/details/6549768



文章不错,感谢分享
页: [1]
查看完整版本: 关于指针的一些问题