这是目前学习指南的一部分,虽然我意识到它并不是很困难,但我无法理解它的要求。
写一个函数: struct * grump(int i,int j) 它返回一个指向“struct grump”的指针,在其字段a,b
中保存值i,j所以我给了
struct grump
{
int a;
int b;
};
我只是对它的要求感到困惑
答案 0 :(得分:3)
要求您分配一个struct grump
,其中包含值i
和j
,例如:
struct grump* func(int i, int j)
{
struct grump *g = malloc(sizeof(*g));
if (g != NULL) {
g->a = i;
g->b = j;
}
return g;
}
注意:在使用g != NULL
之前,我们会检查malloc()
是否确保grump
成功,否则该函数将返回NULL
。当然,在某些时候你需要free()
那段记忆,我相信你的学习指南很快会提到它。
答案 1 :(得分:1)
你必须写一个函数
这会将您传递给函数的值设置为struct grump
,但它取决于您的struct对象。
如果结构对象是全局的,或者您使用malloc()
我使用malloc()
你可以这样做:
struct grump* foo(int i, int j)
{
struct grump *ptg;
ptg=malloc(sizeof(struct grump));
if(ptg)
{
ptg->a=i;
ptg->b=j;
}
return ptg;
}
int main()
{
struct grump *pg;
pg=foo(5,10);
// Do whatever you want
free(pg); // Don't forget to free , It's best practice to free malloced object
return 0;
}
答案 2 :(得分:1)
在C中没有称为构造函数的内置函数,但这基本上就是您所编写的内容。将它提升到一个新的水平并使用typedef
创建一些稍微更像对象的结构可能是一个好主意。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int a, b;
} g;
g *grump(int i, int j) {
g *t = malloc(sizeof(g));
t->a = i;
t->b = j;
return t;
}
int main(int ac, char **av) {
g *a;
a = grump(123, 456);
printf("%d %d\n", a->a, a->b);
return 0;
}