这将是一个简单的问题,但是在谷歌上搜索似乎没有提供答案。我理解,在C语言中,当foo是一个结构体时,有两种初始化foo对象的方式。请看下面的代码示例:
因此,我的问题是如何在C语言中引用这些不同的初始化方法?第一个返回一个初始化后的foo指针,因此如果您想要在堆上使用foo对象,那么很容易使用它:
但第二个需要一个 foo .. 是什么呢?看下面的代码。
所以第二种方法使得在堆栈上初始化对象变得容易,但是如何调用它呢?这基本上是我的问题,如何引用初始化的第二种方法。
第一种方法分配并初始化了一个指向foo的指针。 第二种方法通过...什么来初始化foo?引用?
作为一个额外的问题,你们在编写C代码时是如何工作的?您确定正在创建的对象的用途,并通过此确定是否应具有type1的初始化函数、type2的初始化函数或两者兼而有之吗?
typedef struct foo
{
int var1;
int var2;
char* var3;
}foo;
//initializes and allocates a foo
foo* foo_init1(int v1,int v2,const char* v3)
{
if(..some checks..)
return 0;
foo* ret = malloc(sizeof(foo));
ret->var1 = v1;
ret->var2 = v2;
ret-var3 = malloc(strlen(v3)+1);
strcpy(ret->var3,v3);
return ret;
}
// initializes foo by ... what? How do we call this method of initialization?
char foo_init2(foo* ret,int v1,int v2, const char* v3)
{
//do some checks and return false
if(...some checks..)
return false//;assume you defined true and false in a header file as 1 and 0 respectively
ret->var1 = v1;
ret->var1 = v1;
ret->var2 = v2;
ret-var3 = malloc(strlen(v3)+1);
strcpy(ret->var3,v3);
return true;
}
因此,我的问题是如何在C语言中引用这些不同的初始化方法?第一个返回一个初始化后的foo指针,因此如果您想要在堆上使用foo对象,那么很容易使用它:
foo* f1 = foo_init1(10,20,"hello");
但第二个需要一个 foo .. 是什么呢?看下面的代码。
foo f1;
foo_init2(&f1,10,20,"hello");
所以第二种方法使得在堆栈上初始化对象变得容易,但是如何调用它呢?这基本上是我的问题,如何引用初始化的第二种方法。
第一种方法分配并初始化了一个指向foo的指针。 第二种方法通过...什么来初始化foo?引用?
作为一个额外的问题,你们在编写C代码时是如何工作的?您确定正在创建的对象的用途,并通过此确定是否应具有type1的初始化函数、type2的初始化函数或两者兼而有之吗?
_new
(用于分配内存)和_init
(不分配内存)。此外,让_new
在内部调用_init
可以使您的代码更易于维护。(有时我会使用_make
代替_new
。) - Chris Lutz