#include <stdio.h>
#include <stdlib.h>
struct node
{
int val;
node * p_next;
};
int main(void)
{
node *test;
为节点指针分配适量的字节。
test = malloc( sizeof(node) );
test->val = 123;
test->p_next = NULL;
printf("%d %p %p\n",test->val,test,test->p_next );
free(test);
printf("Press enter to continue.... \n");
getchar();
return 0;
}
然后我得到这个错误,我不明白为什么我应该得到,即使我给了节点指针的类型。
error: invalid conversion from 'void*' to 'node*' [-fpermissive]
test = malloc( sizeof(node) );
^
答案 0 :(得分:2)
您正在使用C ++编译器进行编译。这可以从错误消息中推断出来。在C中有效的是将void*
(由malloc
返回)分配给非void指针变量。但这在C ++中是无效的。你的编译器是一个C ++编译器。
如果您真的打算编写C,那么您将需要使用C编译器。
当您切换到C编译器时,您需要将结构引用为struct node
或使用typedef将其引用为node
。
typedef struct node node;
struct node
{
int val;
node *p_next;
};
当前代码接受没有typedef的普通node
的原因是您正在使用C ++编译器进行编译。
答案 1 :(得分:-1)
除非您在其他地方有typedef
,否则您需要在定义和演员阵容中引用struct node
:
struct node {
int val;
struct node * p_next;
};
int main(void)
{
struct node *test;
test = malloc(sizeof(struct node));
...
}