【发布时间】:2021-02-21 00:01:38
【问题描述】:
我正在尝试实现一个void initBook(char *t, int y, BookType **b) 函数,该函数动态分配一个新的BookType 结构,将新结构的字段初始化为在t 和y 参数中找到的值,并返回一个指向它的指针b 参数中的新结构。我对如何做最后一部分感到困惑,我必须返回一个指针并希望得到一些帮助。我还认为如果函数无效,我无法返回值?当我尝试编译时,我收到警告
'return' 带有一个值,在函数中返回 void。
不相关,但我也得到错误
'*b' 是一个指针;你的意思是使用'->'吗?对于行 *b->year = y;
这让我很困惑,因为我真的写了一个箭头。有谁知道为什么我仍然收到此错误?
书.c
void initBook(char *t, int y, BookType **b){
*b = malloc(sizeof(BookType));
strcpy((*b)->title, t);
*b->year = y;
return b;
}
defs.h
typedef struct{
int id;
char *title;
int year;
} BookType;
【问题讨论】:
-
"return" 在这种情况下并不意味着函数的返回值。这只是意味着将值返回给调用者。您已经使用返回参数执行了该操作:
*b = malloc(sizeof(BookType));. -
void函数没有返回值;完全放弃return声明。您正确使用(*b)->title访问标题;您应该使用(*b)->year来访问年份。您对*b的赋值设置了其地址传递给函数的变量,有效地“返回”了新值。 -
您应该在设置标题和年份之前检查
*b不为空。众所周知,内存分配有时会失败。您还应该考虑如何初始化id成员;目前,它的内容是不确定的。您也没有将标题复制到其中的有效点指针。我是从Martin James 的comment 那里找到的。
标签: c pointers struct dynamic return