2

どうすればいいですか?例えば

        typedef struct node
     {   int data;
         struct node* next;
     }node;

私のノードであり、私のメインでは私が持っています

       int main(){
          node* array[10];
          if (node[0].data == 0){
           ...

                                }

ここで何をする必要があるのか​​ よくわかりません。配列内のこれらのエントリが既に変更されているかどうかを確認できるようにしたいと考えています。どうすればいいですか?の代わりに -> 演算子を試しました。私はオブジェクトを扱っているので、混乱を引き起こしていますね。私はこれについて確信が持てません。

アドバイスに従って、これが私が今持っているものです。

 int main() {
 struct node* arr[10] = { 0 } ;
   addTo(data, arr);
            }


   addTo(int data, node* arr){
        if (arr[0] == NULL)
                             }

最後の行はセグメンテーション違反です。

4

3 に答える 3

4

C の配列を「空」にすることはできません。それらは決して空ではありません。10 要素の配列を宣言すると、常に 10 要素の配列になります。変更した要素を手動で「マーク」する方法を自分で考え出さない限り、要素が変更されたかどうかを判断する方法はありません。たとえば、「空の」要素を指定する予約済みの要素値を選択できます。

あなたの場合、10個のポインターの配列を宣言します

node* array[10];

初期化子を指定する場合

node* array[10] = { 0 };

配列要素の初期値は null になります。その値を「空」要素のマークとして使用できます。

于 2013-10-08T15:30:59.387 に答える
2
       node array[10]; //array of struct node type 
       //node *array[10]; //this becomes declaration of array of pointers

       //assuming you have initialized all with 0.

       for(i=0;i<10;i++)   
       if (array[i].data == 0)   
       //data modified.
       //if you declare array of pointers check if(array[i]->data==0)
于 2013-10-08T14:17:52.417 に答える
1

投稿したコードは、コンパイルさえされないため、クラッシュすることはありません。明らかな間違いをすべて修正して、コンパイラ エラーを取り除きました。今では、クラッシュすることなく問題なく動作します。

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node* next;
} node;

/* changed node* to node*[] and added return type */
void addTo(int data, node* arr[])
{
    if (arr[0] == NULL)
    {
        puts("yes");
    }
    else
    {
        puts("no");
    }
}

int main()
{
    struct node* arr[10] = { 0 } ;
    /* changed data to 42, because there is no variable data in scope here */
    addTo(42, arr);
}

他にご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-10-08T18:36:50.337 に答える