首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能给我解释一下这段代码吗?

有人能给我解释一下这段代码吗?
EN

Stack Overflow用户
提问于 2011-05-24 06:15:18
回答 2查看 187关注 0票数 1

这是一个我试图理解的程序的一小段,但由于指针的原因无法理解。

代码语言:javascript
复制
/* 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;

我关心的是这一部分:

代码语言:javascript
复制
/* 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会有什么用处。或者在上面的任何代码执行之前,指针就会传递它吗?

基本上,放在函数末尾的指针有什么用处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-24 06:17:35

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

这是从函数中提供结果的一种非常标准的方式。调用方传递一个指向其变量的指针,被调用方执行此代码所做的事情:取消引用传递的指针并更改它所指向的值,从而更改调用方的变量。

票数 4
EN

Stack Overflow用户

发布于 2011-05-24 06:22:52

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

例如,标准库函数scanf就是这样做的。指定从标准输入读取值时使用的格式字符串,然后为其提供指向将用于存储值的变量的指针。

代码语言:javascript
复制
int x;
char c;
float f;

scanf("%d %c %f", &x, &c, &f);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6103653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档