我遇到粗体变量的问题。克里昂说从未访问过这些参数。
当我调用函数 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;
答案 0 :(得分:1)
你做错了。在c中,当您将参数传递给函数时,最终会按值传递变量的副本。修改函数中的变量没有(有用)影响,因为您只是修改函数调用完成时丢弃的变量的临时副本。编译器正确地为此解决错误。要完成你可能想要做的事情,你需要使用指针,你仍然需要初始化它们。
请注意,您的代码可能仍然存在错误,因为您尚未向我们展示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
调用中使用。