这是我想要了解的程序的一小部分,但由于指针而无法理解。
/* 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将如何使用。 或者,即使在执行上述任何代码之前,指针仍会传递?
基本上如何将该指针置于函数末尾是否有用?
答案 0 :(得分:4)
json_result
是一个指针,可能是来自外部的参数。使用*
取消引用它并更改指向的值。
这是一种提供功能结果的非常标准的方法。调用者传递一个指向其变量的指针,被调用者完全执行此代码所做的操作:取消引用传递的指针并更改它指向的值,从而更改调用者的变量。
答案 1 :(得分:0)
我无法确定,因为你没有在你的代码片段中包含函数签名,但如果json_result
是一个作为函数参数传入的指针,那么它对于函数的调用者。在C中,当您希望能够从函数返回多个值时,通常会将指针传递给将保存返回值的变量。这可能就是在这里做的。
例如,标准库函数scanf执行此操作。您指定一个格式字符串,用于从标准输入读取值,然后指定它将用于存储值的变量的指针。
int x;
char c;
float f;
scanf("%d %c %f", &x, &c, &f);