は私が試験中にこのコードを与え、そしてそれが何をするかを説明するのに必要だった: (ソースは英語ではなかったので、私は、いくつかの名前を変更)ポインタとローカル変数
#include <stdlib.h>
typedef int typeInfoSCL;
struct elemSCL
{
typeInfoSCL info;
struct elemSCL* next;
};
typedef struct elemSCL TypeElemSCL;
typedef TypeElemSCL* TypeSCL;
void list_add(TypeSCL *scl, typeInfoSCL e)
{
TypeSCL tmp = *scl;
*scl = malloc(sizeof(struct elemSCL));
(*scl)->info = e;
(*scl)->next = tmp;
}
int main()
{
TypeSCL scl1 = NULL;
list_add(&scl1, 3);
list_add(&scl1, 5);
TypeSCL tmp = malloc(sizeof(struct elemSCL));
tmp->next = scl1;
list_add(&tmp, 7);
}
私はtmp
以来のことを考えましたlist_add
内のローカル変数、この文である:メソッドが呼び出された後、scl->next
がもう存在しないので、
(*scl)->next = tmp;
は、間違ってないだろう。
テストで私が間違っていることが判明しました。どうしてこんなことに?割り当て
(*scl)->next = tmp;
であなたの代わりにあなただけの場所である(tmp
の内容をコピーし、変数に(*scl)->next
ポイントを作らない
このコードはコンパイルされません。コンパイル可能なコードを投稿してください。あなたはおそらくすべての名前を適切に変更していないでしょう。 –
これは何らかの擬似コードであり、実際のCではないので、質問に答えることは不可能です。特に、関数の戻り値の型が欠落していると、応答しようとするすべての違いが生じます。 – Lundin
ここでいくつかの '*'を見逃していると仮定します: 'struct elemSCL next;' – Gerhardh