指向指针的指针
#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;
}
为啥这段代码没有问题,在编译器中打印不出来呢 这段代码有两个问题导致无法输出结果。
首先,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官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-12-2 23:15
这段代码有两个问题导致无法输出结果。
首先,char *cBooks是一个指针数组,应该使用花括号来初始化,并且 ...
jiayuloves = &byFishC;这里byFishC的地址是cBooks【5】,为啥把byFishC的地址赋值给jiayuloves 学不死就死里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]