在C语言中使用struct Aliasname* 作为函数返回类型

yrdbyhpb  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(130)

我是C语言的新手!如果我的问题很简单或其他什么的,请原谅我。而且,我也很感激我的问题能得到简单的解释,非常感谢。
我阅读到了C语言中的列表,基于这个示例代码,他们正在尝试创建一个列表函数:

typedef struct list{int data; struct list *next;} list;

list* creat_list(int d){
    list* head = malloc(sizeof(list));
    head ->data = d;
    head ->next = NULL;
    return head;
}

函数的工作方式对我来说很简单,但我不明白为什么他们用list*作为函数的返回类型,这到底意味着什么?正如我目前所了解的,list*意味着指向struct list的指针,但是,使用来自结构体的指针作为函数的返回类型意味着什么?我怎么知道什么时候应该使用它?
如果其余的代码很重要,我将其写在下面

#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"

typedef struct list{int data; struct list *next;} list;

int is_empty(const list *l){ return (l == NULL);}

list* creat_list(int d){
    list* head = malloc(sizeof(list));
    head ->data = d;
    head ->next = NULL;
    return head;
}

list* add_to_front(int d, list* h){
    list* head = creat_list(d);
    head ->next;
    return head;
}

list* array_to_list(int d[], int size){
    list* head = creat_list(d[0]);
    int i;
    for(i = 1; i < size ; i++){
        head = add_to_front(d[i], head);
    }
    return head;
}

void print_list(list *h, char *title){
    printf("%s\n", title);
    while(h != NULL){ //checker!
        printf("%d :", h->data);
        h = h ->next;
    }
}

int main(){

    list list_of_int;
    list* head = NULL;
    int data[6]= {2, 3, 5, 7, 8, 9};

    head = array_to_list(data, 6);
    print_list(head, "multiple elements list");
    printf("\n\n");


    //  Commented code is for single element list
    /*
    head = malloc(sizeof(list));
    printf("sizeof(list) = %lu\n", sizeof(list)); //long long ??
    head -> data = 5;
    head -> next = NULL;
    print_list(head, "single element list");
    printf("\n\n");

     */

    return 0;

}
cunj1qz1

cunj1qz11#

creat_list()为列表头(列表中的第一项)分配内存,并返回一个指向该列表的指针,以便将其传递给对该列表进行操作的其他函数。

List* mylist = creat_list( 1 ) ;

add_to_front( 2, mylist ) ;
add_to_front( 3, mylist ) ;    
add_to_front( 10, mylist ) ;

这里,mylist被传递给add_to_front,这样它就知道它要添加到哪个列表。它允许你有多个列表:

List* Alist = creat_list( 1 ) ;
List* Blist = creat_list( 2 ) ;

add_to_front( 2, Alist ) ;
add_to_front( 3, Blist ) ;

请注意,只有当add_to_front()的名字具有隐含的语义时,上面的语句才有意义。您的问题中给出的函数没有做到这一点。向单链表的 front 添加内容并不简单,它显然是为附加到 end 而设计的。

相关问题