【发布时间】:2019-06-06 23:50:43
【问题描述】:
我学校的任务如下:
创建一个函数,该函数将******str作为参数,指向指向指针的指针,指向指向char的指针的指针,并将Follow the white rabbit!设置为char的指针。
void mx_deref_pointer(char ******str);
我是 C 新手并且非常困惑,尽管我已经学会了我能找到的关于指针的一切..(
我想出了以下代码:
#include <stdio.h>
#include <stddef.h>
void mx_deref_pointer(char ******str) {
char *pstr1, **pstr2, ***pstr3, ****pstr4, *****pstr5;
str = &pstr5;
pstr5 = &pstr4;
pstr4 = &pstr3;
pstr3 = &pstr2;
pstr2 = &pstr1;
pstr1 = "Follow the white rabbit!";
printf("%s", pstr1);
}
int main() {
char ******pstr6 = NULL;
mx_deref_pointer(pstr6);
}
它确实输出 Follow the white rabbit,但我认为它不正确,因为注释掉大部分函数仍然会产生相同的结果。另外,我不知道如何将 NULL 以外的任何内容传递给 mx_deref_pointer()。一些和我一起学习的人想出了一个不同的 mx_deref_pointer:
void mx_deref_pointer(char ******str) {
str [0] [0] [0] [0] [0] [0] = "Follow the white rabbit!";
}
它似乎有效,但是他们都无法向我解释它是如何工作的。如果有人可以为此提供一段适当的代码,我将非常感激,更重要的是,解释它的作用和方式!
谢谢。
【问题讨论】:
-
str = &pstr5不会做任何有用的事情,因为 C 通过值传递所有参数。我建议您搜索一下在 C 中模拟通过引用传递。 -
所有这些指针都属于
main,只有埋得最深的那个应该(按地址)发送到mx_deref_pointer,在那里它被完全取消引用以设置请求的值。 -
是的,你的代码本质上是
char *pstr1 = "..."; printf("%s", pstr1);我希望你会得到main中初始化pstr6的代码。所以我不清楚你是否完整地提出了这个问题。 -
@Kali,见:stackoverflow.com/questions/23963269/…>