[英]Initializing a Variable
是否可以在C中执行类似的操作?
typedef XXX bar;
void foo(bar i) {
...
}
main() {
bar a;
foo(a); // note!!, this is not foo(&a)
// a is now initialized
}
注意foo
是一个void
函数,否则通过返回新的bar可以很容易地解决问题。 此外,即使bar是一个指针,还是指向一个指针的指针,例如typedef int ** bar
,我也没有看到foo
如何初始化a
我提出了我的问题,因为我相信GMP会做类似的事情。 因此,在GMP中,您可以:
mpz_t a;
mpz_init2(a);
// a is now initialized
从http://gnu.huihoo.org/gmp-3.1.1/html_chapter/gmp_4.html :
mpz_t实际上实现为某种结构类型的单元素数组。 这就是为什么使用它声明变量为对象提供GMP所需字段的原因,然后将其用作参数将指针传递给该对象。
引用语义可以在C中通过使用函数中的指针参数和参数列表中的address-of运算符来实现:
void init(int * dst, int value) { *dst = value; }
// ^^^^^^
// function takes parameter by address, passed as a pointer
int main()
{
int a;
init(&a, 10);
// ^^
// caller passes address-of object
}
如果您想要一种语法上在词法上省略了address-of运算符,则可以将该部分粘贴到宏中:
#define INIT_BY_REF(x, val) init_ref(&(x), val)
现在使用: init_ref(a, 10)
仅当要初始化的变量是指针或( typedef
)数组时才有可能。 我没有使用GMP的经验,但是该初始化函数向我表明mpz_t
是指针或数组的typedef。
如果传递的参数是原始值或结构值,则该函数将使用其自己的数据副本,并保持传递给它的变量不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.