我想创建一个初始大小为len
的新的intarr_t
,但我从来没有用typedef
'ed变量处理这类问题。在函数中对typedef创建的变量使用malloc
我的问题是intarr_create()
应该分配数组空间,然后返回一个指向它的指针,如果malloc成功或者指向NULL
,如果我失败了。我怎样才能解决这个问题?
此外,为什么函数中有一个*符号?
这里是我的代码:
#include <stdio.h>
typedef struct {
int* data;
unsigned int len;
} intarr_t;
intarr_t* intarr_create(unsigned int len) {
//intarr_t with initial size len
intarr_t = (int *) malloc(len); // not working here, can someone explain why?
if(intarr_t != NULL) {
return intarr_t;
} else {
return NULL;
}
}
int main() {
int len = 15;
int h = intarr_create(len);
printf("%d\n", h);
return 0;
}
注意,['typedef''ing结构](http://stackoverflow.com/a/4566358/1757964)是C语言的最坏,最可怕的弊端之一。如果你可以避免使用它,请这样做。 – APerson 2014-11-05 19:27:33
您正尝试在'main'的函数调用中将指针类型分配给非指针类型。你也可以直接返回'malloc'的结果,如果你打算在失败时返回NULL,[并且不要强制转换'malloc'的结果](http://stackoverflow.com/questions/605845/do -i-cast-of-malloc) – IllusiveBrian 2014-11-05 19:28:05
@APerson这有点极端,它有一些优点和很少的缺点 – 2014-11-05 19:51:15