调用方法

时间:2019-04-24 01:29:41

标签: 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 快速脚步  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 、、、、、、、、、、、、、、、、、、、、、、、、、

5 快速脚步  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,, 等等...

相反,它在做:

2 快速脚步  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 、、、、、、、、、、、、、、、、、、、、、、、、、

5 快速脚步  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 、、、、、、、、、、、、、、、、、、、、、、、、、

1 个答案:

答案 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);