2011-05-23 117 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); 
相關問題