C 将变量设置为函数的返回类型
我似乎不明白为什么这行不通,我正在传递'aHouse'变量一个返回房子的函数。我是C语言的新手,所以我仍在努力了解一些事情C 将变量设置为函数的返回类型,c,function,struct,C,Function,Struct,我似乎不明白为什么这行不通,我正在传递'aHouse'变量一个返回房子的函数。我是C语言的新手,所以我仍在努力了解一些事情 #include <stdio.h> typedef struct house { int id; char *name; } House; House getHouse() { House *myHouse = NULL; char c = getchar(); myHouse->id = 0; my
#include <stdio.h>
typedef struct house {
int id;
char *name;
} House;
House getHouse()
{
House *myHouse = NULL;
char c = getchar();
myHouse->id = 0;
myHouse->name = c; /*only single char for house name*/
return *myHouse
}
int main()
{
House *aHouse = NULL;
aHouse = getHouse();
}
#包括
typedef结构房屋{
int-id;
字符*名称;
}房子;
豪斯盖特豪斯酒店
{
House*myHouse=NULL;
char c=getchar();
myHouse->id=0;
myHouse->name=c;/*房屋名称只有一个字符*/
返回*我家
}
int main()
{
House*aHouse=NULL;
a house=getHouse();
}
首先:
您正在使用空指针,并在“getHouse”函数中为其赋值。这是未定义的行为,应给出访问冲突
此外,您正在从getHouse按值返回House对象,并尝试将其指定给指针类型。指针和值是两种不同的东西
这里根本不需要指针,除非您希望在堆上动态分配房屋
House getHouse()
{
House myHouse;
char c = getchar();
myHouse.id = 0;
myHouse.name = c; /*only single char for house name*/
return myHouse
}
int main()
{
House aHouse;
aHouse = getHouse();
}
编辑:为了提高效率,您可以这样实现:
void getHouse(House* h)
{
char c = getchar();
h->id = 0;
h->name = c; /*only single char for house name*/
}
int main()
{
House aHouse;
getHouse(&aHouse);
}
再次编辑:
同样在房屋结构中,因为名称只能是一个字符,所以不要使用字符*作为名称,只使用字符。首先:
您正在使用空指针,并在“getHouse”函数中为其赋值。这是未定义的行为,应给出访问冲突
此外,您正在从getHouse按值返回House对象,并尝试将其指定给指针类型。指针和值是两种不同的东西
这里根本不需要指针,除非您希望在堆上动态分配房屋
House getHouse()
{
House myHouse;
char c = getchar();
myHouse.id = 0;
myHouse.name = c; /*only single char for house name*/
return myHouse
}
int main()
{
House aHouse;
aHouse = getHouse();
}
编辑:为了提高效率,您可以这样实现:
void getHouse(House* h)
{
char c = getchar();
h->id = 0;
h->name = c; /*only single char for house name*/
}
int main()
{
House aHouse;
getHouse(&aHouse);
}
再次编辑:
同样在House结构中,因为名称只能是一个字符,所以不要使用char*作为名称,只使用char。这段代码中存在很大的问题:在将myHouse指针初始化为NULL后,您无法使用它。这不是家庭作业,只是对我的一些不起作用的代码的简单抽象@didier啊好的,这开始变得更有意义了,谢谢。这段代码有很大的麻烦:在你将myHouse指针初始化为NULL后,你不能使用它。这不是家庭作业,只是我的一些代码的一个简单的抽象,没有工作@迪迪埃啊好的,这开始变得更有意义了,谢谢。谢谢,这正是我想要的。指针开始变得更有意义了。如果我的主函数指向*a,那么无法保证House在我退出函数后仍然存在,对吗?如果getHouse返回指向House类型的局部变量的指针,那么这也是未定义的行为,因为局部变量将在堆栈上分配,然后在函数退出时从堆栈中解除分配。如果您需要该对象在函数返回时仍然有效,则需要将其分配到堆中(例如,使用malloc()。指针将保持有效,直到它指向的内存被释放(例如,使用free()。如果在堆上进行分配,则需要小心以后释放内存以避免泄漏。我建议你好好读一读。谢谢,这正是我想要的。指针开始变得更有意义了。如果我的主函数指向*a,那么无法保证House在我退出函数后仍然存在,对吗?如果getHouse返回指向House类型的局部变量的指针,那么这也是未定义的行为,因为局部变量将在堆栈上分配,然后在函数退出时从堆栈中解除分配。如果您需要该对象在函数返回时仍然有效,则需要将其分配到堆中(例如,使用malloc()。指针将保持有效,直到它指向的内存被释放(例如,使用free()。如果在堆上进行分配,则需要小心以后释放内存以避免泄漏。我建议好好读一读。