gpt4 book ai didi

c - C 中的指针仅在调用方法时更新一次

转载 作者:行者123 更新时间:2023-11-30 14:39:57 25 4
gpt4 key购买 nike

我正在做一个模仿兔子和乌龟赛跑的程序。我不明白为什么我的海龟运动指针在多次满足条件时只更新一次。

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com