C - 主函数中的(节点)结构不工作(有意避免使用单链表实现)
C - Not working (node) structures in main function (intentionally avoiding use of singly linked list implementation)
我正在尝试创建一个 linked 列表而不执行。我这样做只是为了更深入地了解结构的工作原理。我只想在主函数中创建 2 个节点并 link 它们。我可以在结构声明中使用 typedef 并通过实现来做到这一点,但这不是我想要的(我可以成功做到)。
我写了一些代码,但是在第27行出现错误(同样的问题出现在第29、30和33行)。我知道这个问题的解释很简单,但我无法在脑海中或网络(或书籍)上找到它。对于这个问题的任何帮助,我将不胜感激。去年我一直在编程。
我想在 CodeReview 中寻求帮助,但相应地,根据他们的常见问题解答,这不是在此类问题上寻求帮助的地方。
错误是:
27:11: error: incompatible types when assigning to type 'struct NODO ' from type 'struct NODO'
E.sig = F;
其他线路也有同样的问题。所有内容都在同一个文件 (.c) 中。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
struct NODE {
int data;
struct NODE *next;
};
struct LIST {
struct NODE *first;
struct NODE *last;
int size;
};
void main(){
struct NODE E;
struct NODE F;
struct LIST L;
E.data = 1;
E.next = NULL;
F.data = 2;
F.next = NULL;
E.next = F; // line 27
L.first = E; // line 29
L.last = F; // line 30
struct NODE *ptr;
ptr = E; // line 33
while(ptr != NULL){
printf("%i\n", ptr->data);
ptr = ptr->next;
}
}
问题是您正试图将一个对象分配给一个指针。您应该分配节点的地址并记下节点对象本身。
尝试E.next = &F;
,其他的都一样。
一个指针是一个变量,它的值是另一个变量的地址,即内存位置的直接地址。所以你必须提供内存位置的地址。在 C
中,变量的地址是使用 & operator
.
导出的
修改后的代码:-
#include <stdio.h>
#include <stdlib.h>
struct NODE {
int data;
struct NODE *next;
};
struct LIST {
struct NODE *first;
struct NODE *last;
int size;
};
int main(){
struct NODE E;
struct NODE F;
struct LIST L;
E.data = 1;
E.next = NULL;
F.data = 2;
F.next = NULL;
E.next = &F; // not E.next = F;
L.first = &E; // not L.first = E;
L.last = &F; // not L.last = F;
struct NODE *ptr;
ptr = &E; // not ptr = E;
while(ptr != NULL){
printf("%i\n", ptr->data);
ptr = ptr->next;
}
return 0;
}
建议使用 int main()
而不是 void main()
。
输出:-
1
2
在将问题发送给 SO 几分钟后,我找到了解决方案或至少一些其他信息,使我找到了解决方案。
在维基百科 (https://en.wikipedia.org/wiki/Struct_(C_programming_language)#Pointers_to_struct) 中,我找到了下一段代码:
struct point {
int x;
int y;
};
struct point my_point = { 3, 7 };
struct point *p = &my_point; /* To declare and define p as a pointer of type struct point,
and initialize it with the address of my_point. */
我的错误是使用指针指向结构而不是结构的地址。指针只能指向地址(它们存储它的值),它们不能指向对象。
我正在尝试创建一个 linked 列表而不执行。我这样做只是为了更深入地了解结构的工作原理。我只想在主函数中创建 2 个节点并 link 它们。我可以在结构声明中使用 typedef 并通过实现来做到这一点,但这不是我想要的(我可以成功做到)。
我写了一些代码,但是在第27行出现错误(同样的问题出现在第29、30和33行)。我知道这个问题的解释很简单,但我无法在脑海中或网络(或书籍)上找到它。对于这个问题的任何帮助,我将不胜感激。去年我一直在编程。
我想在 CodeReview 中寻求帮助,但相应地,根据他们的常见问题解答,这不是在此类问题上寻求帮助的地方。
错误是:
27:11: error: incompatible types when assigning to type 'struct NODO ' from type 'struct NODO'
E.sig = F;
其他线路也有同样的问题。所有内容都在同一个文件 (.c) 中。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
struct NODE {
int data;
struct NODE *next;
};
struct LIST {
struct NODE *first;
struct NODE *last;
int size;
};
void main(){
struct NODE E;
struct NODE F;
struct LIST L;
E.data = 1;
E.next = NULL;
F.data = 2;
F.next = NULL;
E.next = F; // line 27
L.first = E; // line 29
L.last = F; // line 30
struct NODE *ptr;
ptr = E; // line 33
while(ptr != NULL){
printf("%i\n", ptr->data);
ptr = ptr->next;
}
}
问题是您正试图将一个对象分配给一个指针。您应该分配节点的地址并记下节点对象本身。
尝试E.next = &F;
,其他的都一样。
一个指针是一个变量,它的值是另一个变量的地址,即内存位置的直接地址。所以你必须提供内存位置的地址。在 C
中,变量的地址是使用 & operator
.
修改后的代码:-
#include <stdio.h>
#include <stdlib.h>
struct NODE {
int data;
struct NODE *next;
};
struct LIST {
struct NODE *first;
struct NODE *last;
int size;
};
int main(){
struct NODE E;
struct NODE F;
struct LIST L;
E.data = 1;
E.next = NULL;
F.data = 2;
F.next = NULL;
E.next = &F; // not E.next = F;
L.first = &E; // not L.first = E;
L.last = &F; // not L.last = F;
struct NODE *ptr;
ptr = &E; // not ptr = E;
while(ptr != NULL){
printf("%i\n", ptr->data);
ptr = ptr->next;
}
return 0;
}
建议使用 int main()
而不是 void main()
。
输出:-
1
2
在将问题发送给 SO 几分钟后,我找到了解决方案或至少一些其他信息,使我找到了解决方案。
在维基百科 (https://en.wikipedia.org/wiki/Struct_(C_programming_language)#Pointers_to_struct) 中,我找到了下一段代码:
struct point {
int x;
int y;
};
struct point my_point = { 3, 7 };
struct point *p = &my_point; /* To declare and define p as a pointer of type struct point,
and initialize it with the address of my_point. */
我的错误是使用指针指向结构而不是结构的地址。指针只能指向地址(它们存储它的值),它们不能指向对象。