我正在做一个模拟野兔和乌龟比赛的程序。我不明白为什么我的乌龟运动指针仅在多次满足条件时才更新一次。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define SIZE 70
void turtleMove(char raceTrack[SIZE], char *tPtr);
int main()
{
char raceTrack[SIZE];
for(int i = 0; i<SIZE; i++)
{
raceTrack[i] = ' ';
}
char *tPtr = raceTrack;
for(int i = 0; i <=10; i++)
{
turtleMove(raceTrack, tPtr);
}
}
void turtleMove(char raceTrack[SIZE], char *tPtr)
{
srand(time(0));
int num = rand() % 10 + 1;
printf("%d\n", num);
if(num >= 1 && num <= 5)
{
printf("Fast plod\n");
*tPtr = ' ';
tPtr += 3;
*tPtr = 'T';
for(int i = 0; i <SIZE; i++)
{
printf("%c,", raceTrack[i]);
}
printf("\n");
}
}
我希望它这样做:
2 快速脚步 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 、、、、、、、、、、、、、、、、、、、、、、、、、
5 快速脚步 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,, 等等...
相反,它在做:
2 快速脚步 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 、、、、、、、、、、、、、、、、、、、、、、、、、
5 快速脚步 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 、、、、、、、、、、、、、、、、、、、、、、、、、
答案 0 :(得分:1)
您仅更新tPtr
的 local 值。
您的功能定义为:
void turtleMove(char raceTrack[SIZE], char *tPtr);
这将指向char
的指针作为第二个参数,因此可以修改和保留tPtr
指向的地址处的任何内容,但是tPtr的 value (地址本身),不能。
要修改地址,您需要将指针传递到指向char
的指针:
void turtleMove(char raceTrack[SIZE], char **tPtr);
然后在函数中,当您要修改 character 时,将取消引用两次:
**tPtr = ' ';
当您要修改地址时,请取消引用一次:
*tPtr += 3;
最后,当然,您必须确定如何调用turtleMove()
,以便传递char**
。幸运的是,您只需抓住tPtr
中定义的main()
的地址即可做到这一点:
turtleMove(raceTrack, &tPtr);