gpt4 book ai didi

c - 将指针作为函数参数传递并在 C 中返回的基本原理

转载 作者:太空狗 更新时间:2023-10-29 15:27:28 25 4
gpt4 key购买 nike

我正在检查 bkhive 的源代码(用 C 语言编写)——一个用于从 Windows NT/2K/XP 系统配置单元中转储 SysKey 引导 key 的实用程序——我想知道是否有任何理由支持某些东西原作者是这样做的:将指向 struct 的指针传递给函数,然后返回相同的指针。这是相关的源代码:

main() 中有一个如下所示的调用:

struct hive h;
char *root_key;
// Do some stuff to init
_RegGetRootKey(&h, &root_key)

调用:

int _RegGetRootKey(struct hive *h, char **root_key)
{
nk_hdr *n;
n = (nk_hdr*) malloc(sizeof(nk_hdr));

/* ************************************************
* RELEVANT FUNCTION CALL
* Why pass n as a parameter and use return value?
* ************************************************/
n = read_nk(n, h, 0x1020);

if (n->id == NK_ID && n->type == NK_ROOT)
{
*root_key = (char *) malloc(n->name_len + 1);
strncpy(*root_key, n->key_name, n->name_len);
(*root_key)[n->name_len] = 0;
free(n);
return 0;
}
free(n);
return -1;
}

调用:

nk_hdr* read_nk(nk_hdr *nk, struct hive *h, int offset)
{
memcpy(nk, h->base + offset + 4, sizeof(nk_hdr));
nk->key_name = (h->base + offset + 4 + 76);
return nk;
}

那么,传递struct指针然后返回的目的是什么?函数不能返回任何内容并在函数调用后使用 n 吗?

最佳答案

此约定的主要好处是允许更简单的函数调用串联。如果你想使用一个函数的返回作为另一个函数的参数,让它返回指针可以让你把语句写在一行中。因此,与其写这样的东西:

foo(myPtr);
bar(myPtr);

你可以这样做:

bar(foo(myPtr));

您显示的具体代码没有使用这个,但这是许多 C 函数中使用的约定,我猜代码的作者现在已经习惯了。

关于c - 将指针作为函数参数传递并在 C 中返回的基本原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7366764/

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