这是一个我试图理解的程序的一小段,但由于指针的原因无法理解。
/* 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也将是真的,但是if语句被放在函数的末尾。我只是不明白json_result会有什么用处。或者在上面的任何代码执行之前,指针就会传递它吗?
基本上,放在函数末尾的指针有什么用处?
发布于 2011-05-24 06:17:35
json_result是一个指针,可能是来自外部的参数。使用*取消对它的引用,并将其指向的值更改为。
这是从函数中提供结果的一种非常标准的方式。调用方传递一个指向其变量的指针,被调用方执行此代码所做的事情:取消引用传递的指针并更改它所指向的值,从而更改调用方的变量。
发布于 2011-05-24 06:22:52
我不能确定,因为您的代码片段中没有包含函数签名,但是如果json_result是作为函数参数传递的指针,那么它将对函数的调用者有用。在C语言中,当你想要从一个函数返回多个值时,通常会传入指向保存返回值的变量的指针。这可能就是这里正在做的事情。
例如,标准库函数scanf就是这样做的。指定从标准输入读取值时使用的格式字符串,然后为其提供指向将用于存储值的变量的指针。
int x;
char c;
float f;
scanf("%d %c %f", &x, &c, &f);https://stackoverflow.com/questions/6103653
复制相似问题