#やりたいこと
C言語でリストを作りたくて、セルを生成する関数を書きたいのですが、関数を何度呼び出しても関数内のローカル変数が指すアドレスが同一で、うまくいきません。下の画像だと、何度呼び出しても一つしかセルが生成されないです。
c
1NODE insert_cell(NODE *p, int d) { 2 NODE new_cell; // 何度呼び出しても同じ変数 3 new_cell.data = d; 4 new_cell.next = p->next; 5 p->next = &new_cell; 6 return new_cell; 7}
試したこと
実際に関数を呼び出すごとに変数が同じものかどうか自分なりに確かめてみました。
c
1#include<stdio.h> 2 3void sub() { 4 int a; 5 if(a >= 1) a++; 6 else a = 1; 7 printf("%p\n", &a); 8 printf("%d\n\n", a); 9} 10 11int main() { 12 sub(); 13 sub(); 14 sub(); 15 return 0; 16} 17 18/* 19出力 200x7ffeefbff40c 211 22 230x7ffeefbff40c 242 25 260x7ffeefbff40c 273 28*/
#教えていただきたいこと
関数内で呼び出すごとに新しい変数を生成する方法が知りたいです。main関数で変数を作成してから以下のようにポインタを渡して、渡された変数をいじればうまくいくのはわかっていますが、引数で変数を受け取らない方法が知りたいです。
c
1// こうすればできるのは確認しました 2void insertCell(NODE *prev_cell, NODE *new_cell) { 3 new_cell->next = prev_cell->next; 4 prev_cell->next = new_cell; 5 return; 6}
回答2件
あなたの回答
tips
プレビュー