18971811635 发表于 2021-10-16 09:16:40

S1E23动动手第二题求助


#include<stdio.h>
int main()
{
      char *array = { "FishC", "Five", "Star", "Good", "WoW" };
      int i, j;
      char *(*p) = &array;      

      for (i = 0; i < 5; i++)
      {
                for (j = 0;*(*(*p+i)+j) != '\0'; j++)         //    *(*(*p+i)+j)   这里和 *(*(p+i)+j)有啥区别?
                {
                        printf("%c ", *(*(*p + i) + j));
                }
                printf("\n");
      }
               
      return 0;
}

大马强 发表于 2021-10-16 09:41:01

我认为前者是先取值加一
后者是地址加一再取值

18971811635 发表于 2021-10-16 09:48:55

大马强 发表于 2021-10-16 09:41
我认为前者是先取值加一
后者是地址加一再取值

*(*(p+i)+j)有啥区别?是一堆乱码

18971811635 发表于 2021-10-16 09:49:29

大马强 发表于 2021-10-16 09:41
我认为前者是先取值加一
后者是地址加一再取值

*(*(p+i)+j)   这个 是一堆乱码

jhq999 发表于 2021-10-16 10:29:48

char *(*p);
p = &array;

p+1=&array+1;//&array+1就是数组array后面和它结构一样的没有声明内存空间,里面当然没有初始化,谁知道是什么都是数值?

大马强 发表于 2021-10-16 10:41:48

{ "FishC", "Five", "Star", "Good", "WoW" };
这个你可以看成一个二维的数组就好理解了
"""      j
   i "FishC"
      "Five"
      "Star"
      "Good"
      "WoW"
    *p+i ->第i行的地址,你可以
    *(*p+i) 就表示第i行的字符串的首地址 可以试试用 printf("%s",*(*p+i)) 来验证
    同理可得 *(*p+i) + j 表示 第i行偏移j位的地址
    (*(*p+i) + j) 表示 第i行偏移j位的地址 的值

"""

18971811635 发表于 2021-10-16 10:54:12

大马强 发表于 2021-10-16 10:41
这个你可以看成一个二维的数组就好理解了

感谢!

18971811635 发表于 2021-10-16 15:58:37

jhq999 发表于 2021-10-16 10:29
char *(*p);
p = &array;



#include <stdio.h>

int main()
{
        int array = {
                {0, 1, 2, 3},
                {4, 5, 6, 7},
                {8, 9, 10, 11} };
        int(*p) = array;
        int i, j;

        for (i = 0; i < 3; i++)
        {
                for (j = 0; j < 4; j++)
                {
                        printf("%3d", *(*(p+i)+j));      // 那这里为什么又可以*(p+i)呢?
                }
                printf("\n");
        }
        return 0;
}

jhq999 发表于 2021-10-16 17:46:42

18971811635 发表于 2021-10-16 15:58
#include

int main()


p=array;
p+i=array+i=array

18971811635 发表于 2021-10-16 18:33:33

jhq999 发表于 2021-10-16 17:46


为啥一个等于array 一个等于&array{:5_94:}

18971811635 发表于 2021-10-16 18:34:50

jhq999 发表于 2021-10-16 17:46


这个怎么判断? 麻烦了

18971811635 发表于 2021-10-16 18:43:48

jhq999 发表于 2021-10-16 17:46


就是前面定义 指针的时候   后面什么情况 是array什么情况是 &array

jhq999 发表于 2021-10-16 19:00:47

18971811635 发表于 2021-10-16 18:43
就是前面定义 指针的时候   后面什么情况 是array什么情况是 &array

前面是一维数组,后面的是二维数组

18971811635 发表于 2021-10-21 09:05:20

大马强 发表于 2021-10-16 10:41
这个你可以看成一个二维的数组就好理解了

char *(*p) = &array;    为啥不能定义成char (*p) = array; 呢
页: [1]
查看完整版本: S1E23动动手第二题求助