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

标签 c arrays pointers methods

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

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

相关文章:

c - 如何更改代码以加密而不是解密文件?

c - c中的矩阵位置访问

javascript - 纯 JavaScript : How to check if 1) array A has any elements of array B and 2) if array A has any elements array B doesn't have

c++ - 在 C++ 中可以将新声明的映射的地址分配给现有映射的地址吗?

c - 将指针分配给函数或将其地址作为函数参数传递之间有什么区别吗?

对两个不同大小的数组进行组合和排序。然后在C程序中将其替换为0和1

c - 如何将此函数转换为更好的函数(例如循环)?

代码无法初始化字符串数组

c - 如何定义一个指针类型的结构体?

mysql - 循环运行时连续从串口读取数据