BlackWhite_idea 发表于 2022-1-8 12:56:40

指针数组和数组指针的问题,求大佬解答

本帖最后由 BlackWhite_idea 于 2022-1-8 12:58 编辑

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

      return 0;
}

char *(*p) = &array; 是(*p)指向指针数组array的全部元素地址,*(*p) 指向指针数组里的元素的元素地址吗???
求大佬讲解一下。。。困扰我两天了

番杰 发表于 2022-1-8 13:09:00

char *(*p) = &array;
这个是定义了一个数组指针,注意它是一个指针,它的指向的不是你说的array全部元素的地址,而是数组array的起始地址,
另外array是一个指针数组,它是一个数组,只不过它里面的元素都是指针。

傻眼貓咪 发表于 2022-1-8 16:11:33

本帖最后由 傻眼貓咪 于 2022-1-8 16:14 编辑

代码供参考:#include <stdio.h>

int main()
{
    /* ----------------------- 字符 ----------------------- */
   
    char A = 'a';
    char *a = &A;
   
    /* ---------------------- 字符串 ---------------------- */
   
    // 第一种字符串:字符串指针 - 静态数据区 - 常量字符串
    char *B = "banana";
    char *(*b) = &B;
   
    // 第二种字符串:字符数组
    char C = "watermelon";
    char *c1 = C;
    char (*c2)[] = &C;
   
    // 第三种字符串:字符数组
    char D = {'f', 'l', 'o', 'w', 'e', 'r'};
    char *d1 = D;
    char (*d2)[] = &D;
   
    /* ---------------- 多个字符串组成数组 ---------------- */
   
    char *E = {"papaya", "strawberry", "oren"};
    char *(*e1)[] = &E;
    char *(*e2) = E;
   
    /* ----------------------- 打印 ----------------------- */
    printf("%c\n", *a);
    printf("%c\n", **b);
    printf("%c\n", *c1);
    printf("%c\n", **c2);
    printf("%c\n", *d1);
    printf("%c\n", **d2);
    printf("%c\n", ***e1);
    printf("%c\n", **e2);

    return 0;
}打印:a
b
w
w
f
f
p
p

BlackWhite_idea 发表于 2022-1-8 16:55:40

傻眼貓咪 发表于 2022-1-8 16:11
代码供参考:打印:

数组指针哪里还是没看懂
第13,14行哪里

人造人 发表于 2022-1-8 17:01:58

BlackWhite_idea 发表于 2022-1-8 16:55
数组指针哪里还是没看懂
第13,14行哪里

https://blog.csdn.net/wangweixaut061/article/details/6549768

傻眼貓咪 发表于 2022-1-8 17:04:09

BlackWhite_idea 发表于 2022-1-8 16:55
数组指针哪里还是没看懂
第13,14行哪里

13 行,其实是常量字符串(表示字符串不能被更改)
14 行,是指针指向字符串第一个字符地址

BlackWhite_idea 发表于 2022-1-8 17:11:25

傻眼貓咪 发表于 2022-1-8 17:04
13 行,其实是常量字符串(表示字符串不能被更改)
14 行,是指针指向字符串第一个字符地址

上面我发的代码 第11行哪里的*(*(*p+i)+j) 这里我看不懂
*p+i 不是 先取值后加i吗? 好像*(p+i)才是移动指针指向的地址啊

jhq999 发表于 2022-1-8 17:18:09

本帖最后由 jhq999 于 2022-1-8 17:31 编辑

#include <stdio.h>

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

      for (i = 0; i < 5; i++)
      {
                for (j = 0; *(*(*p + i) + j) != '\0'; j++)//*p=p=array;*p + i=array+i=&array;*(*p + i) =array;*(*p + i) + j=array+j=&array;*(*(*p + i) + j)=*(&array)=array;
                {
                        printf("%c ", *(*(*p + i) + j));
                }
                printf("\n");
      }

      return 0;
}

傻眼貓咪 发表于 2022-1-8 17:35:55

BlackWhite_idea 发表于 2022-1-8 17:11
上面我发的代码 第11行哪里的*(*(*p+i)+j) 这里我看不懂
*p+i 不是 先取值后加i吗? 好像*(p+i)才是移 ...

你说的应该是:#include <stdio.h>

int main()
{
    char *p = "Hello World!"; // 一级指针
   
    for(int i = 0; i < 12; i++){
      printf("%c ", *(p+i));
    }
   
    return 0;
}
页: [1]
查看完整版本: 指针数组和数组指针的问题,求大佬解答