2011-05-23 143 views
1

这是我想了解的程序的一小部分,但由于指针而无法理解。有人可以向我解释这段代码吗?

/* 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也是如此,但是如果语句放在函数的末尾。我只是不明白json_result如何被使用。 或者,即使在执行上面的任何代码之前,指针是否会通过?

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

回答

4

json_result是一个指针,可能是外部参数。使用*解除引用并将其值更改为指向

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

+0

这是否“if语句”以任何方式上面的代码影响它? – dikidera 2011-05-23 22:20:27

+0

@dikidera - 除非有一个循环,控制返回,否。在你的代码中,似乎没有循环,所以它不会影响它上面的代码。 – littleadv 2011-05-23 22:21:35

0

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

例如,标准库函数scanf这样做。您指定格式字符串从标准输入读值使用,然后给它的指针变量,它会用它来存储值英寸

int x; 
char c; 
float f; 

scanf("%d %c %f", &x, &c, &f); 
相关问题