2016-05-12 99 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

那我怎么不需要数组的指针呢? –

相关问题