学不死就死里xue 发表于 2023-12-2 23:14:59

指向指针的指针

#include <stdio.h>

int main() {
    char *cBooks[] = {
      "<C程序设计语言>",
      "<C专家编程>",
      "<C和指针>",
      "<C陷阱和缺陷>",
      "<C primer plus>",
      "<带你学C带你飞>"
    };

    char **byFishC; // 指鱼C工作室自己出版的书
    char **jiayuloves; // 存放四本小甲鱼最爱的书
    int i;

    byFishC = &cBooks; // 这里byFishC指向cBooks的最后一个元素
    jiayuloves = &byFishC;
    jiayuloves = &byFishC;
    jiayuloves = &byFishC;
    jiayuloves = &byFishC;

    printf("Fishc出版的图书有:%s\n", *byFishC);
    printf("小甲鱼喜欢的图书有:\n");
    for (i = 0; i < 4; i++) {
      printf("%s\n", *jiayuloves);
    }

    return 0;
}


为啥这段代码没有问题,在编译器中打印不出来呢

FishC_GPT 发表于 2023-12-2 23:15:17

这段代码有两个问题导致无法输出结果。

首先,char *cBooks是一个指针数组,应该使用花括号来初始化,并且每个元素需要为字符串常量。修改代码如下:

char *cBooks[] = {
    "book1",
    "book2",
    "book3",
    "book4",
    "book5",
    "book6"
};

第二个问题在于循环打印小甲鱼喜欢的图书时,应该打印的是*jiayuloves的值,而不是*jiayuloves的地址。修改代码如下:

printf("%s\n", *jiayuloves);

改正后的完整代码如下:

#include <stdio.h>

int main() {
    char *cBooks[] = {
      "book1",
      "book2",
      "book3",
      "book4",
      "book5",
      "book6"
    };

    char **byFishC; // 指鱼C工作室自己出版的书
    char ***jiayuloves; // 存放四本小甲鱼最爱的书
    int i;

    byFishC = &cBooks; // 这里byFishC指向cBooks的最后一个元素
    jiayuloves = &byFishC;

    printf("Fishc出版的图书有:%s\n", *byFishC);
    printf("小甲鱼喜欢的图书有:\n");
    for (i = 0; i < 4; i++) {
      printf("%s\n", *(*jiayuloves - i));
    }

    return 0;
}

该代码输出结果为:

Fishc出版的图书有:book6
小甲鱼喜欢的图书有:
book6
book5
book4
book3

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

学不死就死里xue 发表于 2023-12-2 23:29:58

FishC_GPT 发表于 2023-12-2 23:15
这段代码有两个问题导致无法输出结果。

首先,char *cBooks是一个指针数组,应该使用花括号来初始化,并且 ...

jiayuloves = &byFishC;这里byFishC的地址是cBooks【5】,为啥把byFishC的地址赋值给jiayuloves

FishC_GPT 发表于 2023-12-2 23:30:11

学不死就死里xue 发表于 2023-12-02 23:29
jiayuloves = &byFishC;这里byFishC的地址是cBooks ...

在这段代码中,byFishC是一个指向指针的指针。byFishC指向的是cBooks数组的最后一个元素,即cBooks的地址。
而jiayuloves也是一个指向指针的指针,它的目的是存放小甲鱼最喜欢的图书。通过将byFishC的地址赋值给jiayuloves,实际上是让jiayuloves指向了byFishC,也就是指向了cBooks的地址。

这样做的目的是为了方便操作和管理,通过jiayuloves可以间接地访问和修改cBooks的值,从而达到操作小甲鱼最爱的图书的目的。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 指向指针的指针