0

Cでスタックを行うのに行き詰まりました。誰かが私を助けてくれればありがたいです。これが私のコードです:

ヘッダ

typedef struct stackEl stackEl;
typedef struct Task Task;
struct stackEl{
     struct Task *zad;
     struct stackEl *last;
};

struct Task{
   int x;
   int y;
};

ソース

void add(stackEl *main, Task *adding)
{
   stackEl tmp;
   tmp.last= main;
   tmp.zad = adding;
   *main=tmp;
}

これは、単一の要素をスタックに追加するのではなく、1 つずつ相互にポイントすることにより、無限の数の要素を作成します。修理方法がわかりません。私はこのようにそれをやろうとしました:

void add(stackEl *main, Task *adding )
{
   stackEl *tmp;
   tmp = (stackEl*)malloc(sizeof(stackEl));
   tmp->last= main;
   tmp->zad = adding;
   main=tmp;
}

このメソッドを使用すると、要素がスタックの一番上に追加されますが、メイン関数のスタックは変更されません。

4

1 に答える 1

1

2番目のバージョンは真実に近いです。スタックに追加する要素ごとにメモリを割り当てる必要があります。2 番目のバージョンでは、実際にこのポインターを変更するのではなく、ポインターのローカル コピーのみを変更することに注意してください。ポインターにポインターを渡して (つまりStackE1**)、次に実行する必要があります*main = tmp

于 2013-01-10T20:27:51.547 に答える