检查结构数组是否为空
我该怎么做呢? 例如
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) }
最后一行是分段错误。
C中的数组不能为“空”。 他们永远不会空虚。 如果您声明了一个包含10个元素的数组,那么您将始终拥有10个元素的数组。 除非你自己想出一些方法来手动“标记”你修改的元素,否则没有办法说明某个元素是否已被修改。 例如,您可以选择一些保留元素值,它将指定一个“空”元素。
在你的情况下,你声明一个10指针的数组
node* array[10];
如果您提供初始化程序
node* array[10] = { 0 };
您的数组元素的初始值为null。 您可以将该值用作“空”元素的标记。
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)
您发布的代码不会导致崩溃,因为它甚至无法编译。 我修复了所有明显的错误以摆脱编译器错误,现在它在这里完美无缺地运行而不会崩溃:
#include #include 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); }
如果您有任何其他问题,请随时提出。