3

我是 C 的初学者,在尝试制作一个简单的蛇游戏时,我偶然发现了在另一个函数中使用时指针值变化的问题。我用指针来养我的蛇,我用了其中的 3 个。诚然这对于蛇类游戏来说可能是一个非常愚蠢的算法,但我觉得我快到了,但我不知道出了什么问题。我为蛇本身使用了 3 个点,蛇的每个部分的 x 坐标以及 y。我不妨只发布我的代码的一部分。

#include<stdio.h>
#include<dos.h>
#include<conio.h>

printer(int *forgoodness,int *y,char *lang,int tx,int ty, int *x)
{
int h=*forgoodness-1,g=0;

这里的值发生了变化,x 以某种方式复制了 y 的 6 个值。

 /* for(;g<15;g++)
{
    printf("%i",x[g]);
}*/
for(;h>=0;h--)
{
    gotoxy(x[h],y[h]);
    printf("%c",lang[h]);
}
    gotoxy(tx,ty);
    printf(" ");
}  


main()
{
int transferx=1,x=1,transfery=1,ch,game=0,dir;
int *transx, *transy, *numel;
int tempsx,g=0,tempsy,forex,j=0,*totalel;
char *snake;
int *snakey, *snakex;

如果我明确分配值,它工作得很好,但我不能用这个来养我的蛇:

//int snakex[15]={26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};
//int snakey[15]={13,13,13,13,13,13,13,13,13,13,13,13,13,13,13};
clrscr();
*totalel=0;
*numel=14;
forex=26;
snake= "***************";

这就是我所做的,我在功能打印机运行之前检查了值并且值很好。

for(;j<15;j++)
{
    snakey[j]=13;
    snakex[j]=forex;
    *totalel=j;
    forex++;
}


printer(numel,snakey,snake,transferx,transfery,snakex);

我希望你能在这方面帮助我。干杯。

4

2 回答 2

2

也许尝试重写一些代码......理想情况下使用更少的指针。根据我看到的代码,看起来好像您正在将值输入随机指针。那是相当危险的。

例如,连续执行这两行是不好的:

int *num;
*num = 9;

原因是因为num它只是一个指向内存的指针......而且它目前还没有指向任何有效的东西。数字 9 正试图存储在某个随机位置。您需要分配一些内存num来指向或指向另一个变量(非指针整数)的地址。我想也许你还没有完全掌握指针的概念。不过不用担心,这需要一点时间。

您应该能够在完全不使用任何指针的情况下编写您的游戏,并且可能现在就像其他人提到的那样只使用一个固定数组。然后对指针的工作原理进行更多阅读,然后再尝试一下。我相信你会明白的!

但是现在,请尝试使用一组新数据重新审视问题,然后将您所做的工作返回给我们,以便我们可以尝试进一步提供帮助。:)

于 2013-07-27T00:24:10.640 回答
1

很酷,您正在使用指针!但正如你所看到的,它们可能有点棘手。您必须记住,指针就像邮箱的地址;他们可以分辨出某物在哪里,但他们无法(靠自己)持有任何东西。can 只是指向可以执行的操作。因此,您声明的每个指针都必须指向一个真实的东西(如 int 或数组元素或数组),然后才能使用或分配它。否则将值推入导致崩溃的随机内存区域。这似乎是您遇到的主要问题。

int *ptr;
int value; 
ptr = &value;
*ptr = 10;
// value now is 10
于 2013-07-27T05:14:17.297 回答