有人可以向我解释这段代码吗?

时间:2011-05-23 22:15:18

标签: c

这是我想要了解的程序的一小部分,但由于指针而无法理解。

/* issue JSON-RPC request */
val = json_rpc_call(curl, srv.rpc_url, srv.rpc_userpass, s);
if (!val) {
    fprintf(stderr, "submit_work json_rpc_call failed\n");
    goto out;
}

*json_result = json_is_true(json_object_get(val, "result"));
rc = true;

sharelog(remote_host, auth_user,
     srv.easy_target ? "Y" : *json_result ? "Y" : "N",
     *json_result ? "Y" : "N", NULL, hexstr);

if (debugging > 1)
    applog(LOG_INFO, "[%s] PROOF-OF-WORK submitted upstream.  "
           "Result: %s",
           remote_host,
           *json_result ? "TRUE" : "false");

json_decref(val);

if (*json_result)
    applog(LOG_INFO, "PROOF-OF-WORK found");

/* if pool server mode, return success even if result==false */
if (srv.easy_target)
    *json_result = true;

out:
return rc;

我担心的是这部分:

/* if pool server mode, return success even if result==false */
if (srv.easy_target)
    *json_result = true;

在我的情况下,srv.easy_target是真的。然后json_result也将为true,但是if语句放在函数的末尾。我只是不明白json_result将如何使用。 或者,即使在执行上述任何代码之前,指针仍会传递?

基本上如何将该指针置于函数末尾是否有用?

2 个答案:

答案 0 :(得分:4)

json_result是一个指针,可能是来自外部的参数。使用*取消引用它并更改指向的值。

这是一种提供功能结果的非常标准的方法。调用者传递一个指向其变量的指针,被调用者完全执行此代码所做的操作:取消引用传递的指针并更改它指向的值,从而更改调用者的变量。

答案 1 :(得分:0)

我无法确定,因为你没有在你的代码片段中包含函数签名,但如果json_result是一个作为函数参数传入的指针,那么它对于函数的调用者。在C中,当您希望能够从函数返回多个值时,通常会将指针传递给将保存返回值的变量。这可能就是在这里做的。

例如,标准库函数scanf执行此操作。您指定一个格式字符串,用于从标准输入读取值,然后指定它将用于存储值的变量的指针。

int x;
char c;
float f;

scanf("%d %c %f", &x, &c, &f);