c - 構造体を関数に渡し、Cで変更する

原文 c pointers struct

だから私は次のコードを持っています:

struct list_el{
   int val;
   struct list_el * next;
};

typedef struct list_el item;

...


prevに値のリストがあります。このリストを使用して、このリストを使用して分析します。つまり、これはintのリストなので、すべてのintはトークンを意味します。構文解析ツールです。

ですから、それを段階的に分析したいと思います。このようなもの:

if (program(prev)){
    printf("SINTAX OK.\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}else{
    printf("Error.\n");
    system("PAUSE");
    return EXIT_FAILURE;
}


そしてprogram:

int program(item *list){
   if (list->val == 11) list = list->next;
   else return 0;
   while (list->val == 13) datEst(list);
   if (list->val == 12) list = list->next;
   else return 0;
   if (list == NULL) return 1;
   else return 0;    
}


そしてdatEst:

int datEst(item *list){
    if(list->val == 13){
        list = list->next;
        return 1;
    }else return 0;
}


つまり、while (list->val == 13) datEst(list);を使用しなくても正しく機能しますが、datEstを使用する必要がある場合は失敗します。

深さの問題だと思いますが、よくわかりません。

手がかりやアドバイスはありますか?私の悪い英語をよろしくお願いします。
答え
while (list->val == 13) datEst(list);


list->val13と等しい場合、無限ループにとどまります。

listdatEstを変更していますが、これは単なる変数のローカルコピーです。 listが指すprogramは変わりません。

可能な解決策:

while (list && list->val == 13) list = list->next;
関連記事

c - C99で関数ポインターの構造がNULLかどうかを確認するクイックチェック

python - プロセス間通信Python [重複]

c++ - ゼロパディング付きのインテルMKLを使用した3D FFT

c - 複数の構造体を宣言し、それらをすでに割り当てられているメモリにオーバーレイする

c - 厳格なエイリアシングを破った結果を理解する

java - Android Gstreamer SDKでANativeWindow_lockがエラー-22を返す

c - 二分木;頻度の高い順に印刷します。 C言語

c - コピーを作成するのではなく、ポインタを使い始める前に、構造はどのくらいの大きさにすべきですか? [C] [終了]

c - Cの配列で2次元配列にインデックスを付ける方法のベクトル化

c - EVP_PKEYを使用したOpenSSL RSA_size