gpt4 book ai didi

c - 在将指针传递给函数时使用 &-操作数?

转载 作者:行者123 更新时间:2023-12-02 00:20:39 27 4
gpt4 key购买 nike

int enter_path(char** path) {
char* standard = "./questions.txt";
printf("\n\t%s\n\t%s",
"Please enter the file location.", "path: ");
fgets(*path, MAX_PATH_LENGTH ,stdin);
*(*path + (strlen(*path)-1) ) = '\0';
if(**path == '\n' )
*path = strdup(standard);
return 0;
}

int main(void){
char* path = malloc(MAX_PATH_LENGTH);
enter_path(&path);
some_other_function_using_the_path_string(path);
}

上面的代码工作正常,我发布这个的原因如下。

为什么我必须将指针“路径”的地址传递给函数 enter_path,以便其他函数可以使用/读取修改后的值。所以简而言之,为什么我在调用“enter_path”函数时必须使用 &-操作数,并且不能将 enter_path 定义为“int enter_path(char* path);”

我知道这是引用 int、long 等数据类型的普通变量。但我假设在使用指针时,更改应该对所有其他函数可见。因为指针仍然指向内存中的同一点,只是值已更改。

难道我看错了吗?

PS:我正在尽力使我的代码符合 ANSI-C 标准,这就是我使用 fgets 而不是 readline 的原因。就这么说吧,因为我已经收到了一些关于 readline 函数使用起来更容易/更安全这一事实的评论。

谨致问候,京东

最佳答案

如果你有一个 T 类型的变量,你希望函数能够修改它,你需要通过指针传递它,即:

void foo(T *p) { *p = 42; }

int main(void) {
T t;
foo(&t);
// The value of t is now 42
}

在您的代码中,Tchar *;换句话说,您的函数需要能够修改指针,因此您需要向它传递一个指向该指针的指针。


但是,这不是好的代码。如果 (**path == '\n') 为真,那么您将泄漏内存。

关于c - 在将指针传递给函数时使用 &-操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com