我正在努力让一个结构指向另一个依赖于传入命令行的参数,问题是,结构我看起来正在指向所需的初始化结构但是,当我在函数调用后打印它们的地址时,在main中,如果播放器是A,则它看起来没有改变(在输出之后):指向一个结构到另一个? (不是永久性的)
Before initialise: 0x7f8a88403990, 0x7f8a884039f0, 0x7f8a88403a50, 0x7f8a88403ab0, 0x7f8a88403b10
After initialise: 0x7f8a884039f0, 0x7f8a884039f0, 0x7f8a88403a50, 0x7f8a88403ab0, 0x7f8a88403b10
After parse args: 0x7f8a88403990, 0x7f8a884039f0, 0x7f8a88403a50, 0x7f8a88403ab0, 0x7f8a88403b10
int main (int argc, char *argv[]) {
Player *me = NULL, *playerA = NULL;
Player *playerB = NULL, *playerC = NULL, *playerD = NULL;
me = malloc(sizeof(*me));
playerA = malloc(sizeof(*playerA));
playerB = malloc(sizeof(*playerB));
playerC = malloc(sizeof(*playerC));
playerD = malloc(sizeof(*playerD));
parse_args(me, playerA, playerB, playerC, playerD, argv);
//should be pointing to the same memory location
printf("After parse args: %p, %p, %p, %p, %p\n", me, playerA, playerB, playerC, playerD);
}
void parse_args(Player *me, Player *a, Player *b, Player *c, Player *d,
char *argv[]) {
initialise_game(*tempChar, tempNum, me, a, b, c, d);
}
void initialise_game(char playerID, int numPlayers, Player *me, Player *a,
Player *b, Player *c, Player *d) {
printf("Before initialise: %p, %p, %p, %p, %p\n", me, a, b, c, d);
switch((int)playerID) {
case 'A':
me = a;
break;
case 'B':
me = b;
break;
case 'C':
if (numPlayers < 3) {
exit_prog(EXIT_PLAYERID);
}
me = c;
break;
case 'D':
if (numPlayers < 4) {
exit_prog(EXIT_PLAYERID);
}
me = d;
break;
}
printf("After initialise: %p, %p, %p, %p, %p\n", me, a, b, c, d);
}
谢谢你提供了一个明确的答案,我现在明白了这项工作是如何的(对不起,我的头脑有些棘手) – user3603183 2014-09-25 22:50:25
通过价值传递指针并尝试修改它们是棘手的 - 它捕捉到许多新的C程序员未料到。我链接到的Stackoverflow问题可以帮助你非常。但是如果你想修改一个函数中的指针,你需要传递它的地址,然后在函数中去引用来完成赋值 – 2014-09-25 22:54:08