別の関数のスコープ内のポインタのリストに新しい要素を作成して挿入することは可能ですか?私は、ポインタを使用している場合、私が作成して挿入することができると思ったこのコードだけで私はローカル変数n2_4
を作成しましたprintf
insertEntry
内の関数を呼び出す場合はそうでない場合、出力はvoidの関数とスコープのローカル変数
-1247318248で働くセグメンテーションフォールト
どこでもポインタのリストの新しい要素が必要です。しかし、それはローカル変数の制限された可視性スコープのようなものです。または私は間違っている?
または、このような目的のためにポインタのポインタを返すことができる関数を使用する必要がありますか?
// Function to insert a new entry into a linked list.
#include <stdio.h>
struct entry
{
int value;
struct entry *next;
};
void insertEntry(struct entry *insertion, struct entry *previous)
{
struct entry n2_4;
n2_4.value = 299;
struct entry *N2_4 = &n2_4;
insertion->next = previous->next; // set n2_3.next to point to whatever n2.next was pointing to
previous->next = insertion; // set n2.next to point to n2_3
insertion->value = 250;
N2_4->next = insertion->next;
insertion->next = N2_4;
}
void printPlist(struct entry *list_pointer)
{
while (list_pointer != (struct entry *) 0) {
printf("%i\n", list_pointer->value);
list_pointer = list_pointer->next;
}
printf("\n");
}
int main(void)
{
struct entry n1, n2, n3, n2_3;
struct entry *list_pointer = &n1;
n1.value = 100;
n1.next = &n2;
n2.value = 200;
n2.next = &n3;
n3.value = 300;
n3.next = (struct entry *) 0; // Mark list end with null pointer
printPlist(list_pointer);
insertEntry(&n2_3, &n2);
printPlist(list_pointer);
return 0;
}
いいえ、関数外の(非静的な)ローカル変数は使用できません。彼らは範囲外に出ます。 – kaylum
ありがとう@ kaylum! – Yellowfun