2016-05-12 89 views
-4

我與粗體變量有問題。 CLion表示,這些參數從未被訪問過。如何將本地int變量作爲參數傳遞給函數?

當我調用函數open_turn時,turn_face和turn_suit表示它們尚未初始化。但我不想通過給它們賦值來初始化這些變量,因爲這些值只在函數被調用後才被確定。

我如何通過INT turn_cardINT turn_f,並INT turn_s到函數open_turn?然後分配INT turn_cardINT轉INT turn_fINT turn_face的價值,並INT turn_sturn_suit

P/S:這一刻,參數INT turn_fINT turn_s都表示要聲明,但從未訪問。

void open_turn(int current_deck[], int turn_card, int turn_f, int turn_s); 

int main() { 
    int turn; 
    int turn_face; 
    int turn_suit; 

open_turn(deck, turn, turn_face, turn_suit); 

} 

void open_turn(int current_deck[], int turn_card, int turn_f, int turn_s) { 
    turn_card = current_deck[card_idx++]; 
    turn_f = turn_card%13; 
    turn_s = turn_card/13; 
+0

你能不涉及到編譯器輸出? –

+0

你在哪裏使用'turn_s'和'turn_f'變量? –

+0

如果你只是在函數中賦值turn_s和turn_f值,你爲什麼需要傳遞它們呢?或者你是否期望它們從函數中返回,在這種情況下,您需要傳入指向int的指針而不是ints。 – OldBoyCoder

回答

0

如果要從C中的函數返回值,則必須將指針傳遞給該變量。例如:

#include <stdio.h> 
void f(int x, int *p) { 
    x = 0; /* This only affects local param x */ 
    *p = 5; /* copies x's value into variable pointed to by p */ 
} 

int main() { 
    int a = 1, b = 2; 
    f(a, &b); /* a passed by value, b's address is passed */ 
    printf("a = %d, b= %d\n", a, b); /* prints out a = 1, b = 5 */ 
} 

這裏編譯器會發出警告,在功能fx變量分配未訪問的價值,因爲它設置爲0 maina沒有影響。 *p = 5未創建警告,因爲它正在影響b的值,然後在printf調用中使用該值。

1

你這樣做是錯的。在中,當你將一個參數傳遞給一個函數時,你最終會通過值傳遞一個變量的副本。在函數中修改變量沒有(有用)影響,因爲您只是修改了函數調用完成時丟棄的變量的臨時副本。編譯器是正確的,爲此排除錯誤。爲了完成你想要做的事情,你需要使用指針,你仍然需要初始化它們。

請注意,由於您未向我們展示如何定義current_deck,因此您的代碼可能仍然存在錯誤。


代碼


/******************************************************************************* 
* Preprocessor directives. 
******************************************************************************/ 
#include <stdio.h> 


/******************************************************************************* 
* Function prototypes. 
******************************************************************************/ 
void open_turn(int current_deck[], int turn_card, int turn_f, int turn_s); 


/******************************************************************************* 
* Function definitions. 
******************************************************************************/ 
int main(void) 
{ 
    int turn; 
    int turn_face; 
    int turn_suit; 
    open_turn(deck, &turn, &turn_face, &turn_suit); 

    /* The following also works. */ 
    int* pTurn = &turn; 
    int* pTurn_face = &turn_face; 
    int* pTurn_suit = & turn_suit; 
    open_turn(deck, pTurn, pTurn_face, pTurn_suit); 

} 

void open_turn(int current_deck[], int* turn_card, int* turn_f, int* turn_s) 
{ 
    if (!turn_card || !turn_f || !turn_s) 
    { 
     printf("Invalid input.\n"); 
     return; 
    } 

    *turn_card = current_deck[card_idx++]; 
    *turn_f = turn_card%13; 
    *turn_s = turn_card/13; 
} 
+0

我對current_deck []數組沒有任何問題,因爲在將數組作爲參數傳遞給函數時,數組總是被視爲指針,是嗎? –

+0

@JasonBui [不是真的。](https://stackoverflow.com/questions/12676402/why-cant-i-treat-an-array-like-a-pointer-in-c)。如果上面的答案解決了您的問題,請考慮將其標記爲「已接受」。 – DevNull

+0

那我怎麼不需要數組的指針呢? –

相關問題