我正在做一个模仿兔子和乌龟赛跑的程序。我不明白为什么我的海龟运动指针在多次满足条件时只更新一次。
#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 快速缓慢 ,,,,T,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
5 快速缓慢 ,,,,,,,,,,T,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 等等...
相反,它正在做:
2 快速缓慢 ,,,,T,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
5 快速缓慢 ,,,,T,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
最佳答案
您仅更新 tPtr
的本地值。
您的函数定义为:
void turtleMove(char raceTrack[SIZE], char *tPtr);
这将指向 char
的指针作为第二个参数,因此 tPtr
指向的地址处的任何内容都可以修改和保留,但值 tPtr(地址本身),不能。
为了能够修改地址,您需要传递一个指向 char
的指针:
void turtleMove(char raceTrack[SIZE], char **tPtr);
然后在函数中,当你想要修改字符时,你取消引用两次:
**tPtr = ' ';
当您想要修改地址时,您可以取消引用一次:
*tPtr += 3;
最后,当然,您必须修复调用 turtleMove()
的方式,以便传递 char**
。幸运的是,您只需获取 main()
中定义的 tPtr
地址即可做到这一点:
turtleMove(raceTrack, &tPtr);
关于c - C 中的指针仅在调用方法时更新一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821163/