3

私は C の初心者で、単純なスネーク ゲームを作成しようとしていたときに、別の関数で使用するとポインターの値が変化するという問題に遭遇しました。ヘビを育てるためにポインターを使用し、そのうちの 3 つを使用しました。確かに、これはスネーク ゲームの非常に初心者のアルゴリズムかもしれませんが、私はほとんどそこにいるように感じますが、何が悪かったのかわかりません。ヘビ自体、ヘビの各部分の x 座標、および y に 3 つのポイントを使用しました。コードの一部を投稿することもできます。

#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

1

ポインタを使って作業していることをクールに!しかし、ご覧のとおり、少し扱いに​​くい場合があります。ポインタはメールボックスのアドレスに似ていることを覚えておく必要があります。彼らは何かがどこにあるかを知ることができますが、(それ自体で)何も保持することはできません。は、何かを指すだけです。したがって、宣言するすべてのポインターは、使用または割り当てられる前に、実際のもの (int、配列要素、または配列など) を指す必要があります。そうしないと、クラッシュの原因となるランダムなメモリ領域に値が押し込まれます。これがあなたが抱えている主な問題のようです。

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