0

我是 C 新手,只是尝试理解问题的一小部分我有一个简单的程序 -1 代表数组的结尾:

#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>

typedef struct List list_t;
struct List {
    void * head;
    list_t * tail;
};

list_t * makelist(void * x, list_t * xs){
    list_t * ans = (list_t *) malloc(sizeof(list_t));
    ans->head =x;
    ans->tail = xs;
    return ans;
}

list_t * makeListFromIntArray(int list[]){
    list_t * ans = (list_t *) malloc(sizeof(list_t));
    int i = 0;
    while(list[i]!=-1){
        ans = makelist((void *)(intptr_t)list[i],ans);
        i++;
    }
    return ans;
}

void printList(list_t * xs){
    while(xs != NULL){
        printf("%lu\n",((intptr_t)xs->head));
        xs = xs->tail;
    }
}

int main() {
    int s[] = {1,2,3,4,5,-1};
    list_t * xs = makeListFromIntArray(s);
    printList(xs);
    return 0;
}

主要问题是当 printList 执行时我最后得到一个零。

5
4
3
2
1
0

Process returned 0 (0x0)   execution time : 0.001 s
Press ENTER to continue.

这是我的主要问题,次要问题是数组颠倒了,这是可以理解的。我可以通过在输入 makelistfromintarray 之前反转来克服这个问题。但是我开放了更优雅的解决方案。

4

1 回答 1

3

问题就在这里...

 list_t * ans = (list_t *) malloc(sizeof(list_t));

您正在在列表的头部创建一个空节点MakeListFromArray。那行应该是

 list_t * ans = NULL;

PS:你永远不应该malloc()在 C 中转换!

于 2013-04-11T18:03:44.273 回答