如何将local int变量作为参数传递给函数?

时间:2016-05-12 15:38:58

标签: c initialization

我遇到粗体变量的问题。克里昂说从未访问过这些参数。

当我调用函数 open_turn 时,表示turn_face和turn_suit尚未初始化。但我不想通过为它们赋值来初始化这些变量,因为这些值仅在调用函数后确定。

如何将 int turn_card int turn_f int turn_s 传递到 open_turn 功能?然后将 int turn_card 的值分配给 int turn ,将 int turn_f 分配给 int turn_face ,并将 int turn_s分配 turn_suit

P / s:此时,参数 int turn_f int 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;

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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 */
}

此处编译器可能会警告函数x中的f变量被赋予一个未被访问的值,因为将其设置为0对a main没有影响}}。 *p = 5没有创建警告,因为它影响b的值,然后在printf调用中使用。