我有一个非常简单的C语言单向链表实现如下:
typedef struct Node{
int data;
struct Node *next;
} node;
void printLL(node * start);
void addNode(node * head, node * add);
int main()
{
node first;
first.data = 99;
first.next = NULL;
node second;
second.data = 11;
addNode(&first, &second);
printLL(&first);
}
void addNode(node * head, node * add)
{
if(head->next)
{
addNode(head->next, add);
}
else
{
head->next = add;
}
}
void printLL(node * start)
{
printf("Data is %d\n", start->data);
if (start->next) {
printLL(start->next);
}
}
我感到困惑的是,如果我不明确设置first.next = NULL,就会出现EXE_BAD_ACCESS错误。当我尝试检查该属性是否已设置或未设置以确定是否应递归调用时,它会发生。另一件我不理解的事情是,如果我将first.next指向“second”,即使对于“second”,我没有明确设置其下一个为NULL,所有函数都能正常工作。因此,在结构体中定义的指针的默认值似乎存在某些不一致性。当然,我可能做错了什么,但如果有人能阐明这个问题,我会非常感激。总之,我的问题是:
- 在结构体中定义的指针的默认值是什么?
- 假设没有默认值,是否有一种简单的方法在结构体定义中设置默认值?(我查阅了一些C书籍,但没有找到答案)