2013-07-26 22 views
3

我是C的初學者,當我試圖做一個簡單的蛇遊戲時,我偶然發現了在另一個函數中使用指針時值更改的問題。我用指針爲了增長我的蛇,我用了3個。當然,這對蛇遊戲來說可能是一個非常不錯的算法,但是我覺得我已經快到了,但是我不知道哪裏出了問題。我已經使用了三個蛇本身,蛇的每個部分的x座標以及y。我可能只是發佈我的代碼的一部分。如何修復C中的不良指針

#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); 

我希望你能幫助我解決這個問題。乾杯。

+0

在初始化數組之前是否j = 0?你能給我們你的整個代碼嗎? –

+0

嗨,這基本上是代碼,其餘的只是使用箭頭鍵移動。是的,j = 0是我數組的第一個索引。 – buzzcarla

+0

你需要在'for'循環開始處初始化'j',就像'for(j = 0; j <15; j ++)'(這是@LidongGuo試圖告訴你的)。 –

回答

2

也許試圖重寫一些你的代碼......理想情況下使用較少的指針。根據我看到的代碼,它看起來好像是將值提供給隨機指針。這很危險。

例如,做連續兩行是壞:

int *num; 
*num = 9; 

的原因是因爲num只是一個指向內存...它目前並未指向任何有效的呢。數字9試圖存儲在一些隨機位置。您需要爲num分配一些內存以指向另一個變量(一個非指針整數),或將其指向另一個變量的地址。我想也許你還沒有完全理解指針的概念。但別擔心,這需要一點時間。

你應該可以在不使用任何指針的情況下編寫遊戲,也許現在就像其他人提到的那樣使用固定數組。然後再閱讀一下指針如何工作並再次嘗試它。我相信你會明白的!

但現在,嘗試用一組新數據重新審視問題,然後回過頭來看看您所做的事情,以便我們可以進一步提供幫助。 :)

1

很酷,你正在使用指針!但正如你所看到的,他們可能有點棘手。你必須記住,指針就像一個郵箱的地址;他們可以知道某物在哪裏,但他們不能(自己)持有任何東西。這隻能指向某件事情。所以你聲明的每個指針必須指向一個真實的東西(比如一個int或一個數組元素或一個數組),然後才能使用或分配它。否則會將值推入隨機存儲器區域,從而導致崩潰。這似乎是你遇到的主要問題。

int *ptr; 
int value; 
ptr = &value; 
*ptr = 10; 
// value now is 10