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 回答