C中的init()函数调用

Posted

技术标签:

【中文标题】C中的init()函数调用【英文标题】:init() function call in C 【发布时间】:2021-12-04 05:53:40 【问题描述】:

我正在关注一个在线教程,该教程向我展示了以下(简化的)代码:

typedef struct 
    int data;
    Node* next;
 Node;


int main()
    Node *head;
    init(&head);
    return 0;
    



init 函数的用途和功能是什么?我自己没有定义它,但是我也在努力在线查找文档。

【问题讨论】:

教程没有解释吗?如果没有,就没有太多教程。我们无法确定它的作用,因为我们没有写。但很可能它只是 *head = NULL; 初始化一个空列表。 init 不在标准库中 貌似教程有自己的init函数来初始化head 【参考方案1】:

首先声明此声明

typedef struct 
    int data;
    Node* next;
 Node;

不正确。此数据成员声明中使用的名称Node

    Node* next;

未定义。

你需要写

typedef struct Node 
    int data;
    struct Node* next;
 Node;

至于你的问题然后在这个声明中

Node *head;

指针head 有一个不确定的值,因为它没有被初始化。

所以看来函数init 只是初始化了指针。您需要通过指向它的指针通过引用传递指针。否则该函数将处理指针head 的副本。取消对指针的引用,您将可以直接访问可以在函数内更改的原始指针 head。也就是函数可以如下所示

void init( Node **head )

    *head = NULL;

注意你可以只写main

Node *head = NULL;

无需调用函数init

【讨论】:

【参考方案2】:

我认为init 功能将在下一个视频中实现。我想如果您创建一个新节点(或本例中的结构)以防止 一些复活节彩蛋 未定义的行为,我想您的老师想使用一个 init 函数来设置一些值。

【讨论】:

以上是关于C中的init()函数调用的主要内容,如果未能解决你的问题,请参考以下文章

C语言调用一个函数无法跳出,死循环

python之类中的super函数

函数调用机制

Objective-C 中的构造函数

go语言语法(基础语法篇)

使用 Fortran 中的内存数据调用 C 代码