我是 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 之前反转来克服这个问题。但是我开放了更优雅的解决方案。