我的功能需要一个引用作为输入:
test = foo(&xyz)
是否可以传递固定值?当然
test = foo(1.23)
不起作用。我可以定义一个新变量来传递,但这真的有必要吗?
由于
菲利普
答案 0 :(得分:3)
您无法获取常量的地址,例如C中的1.23
。但是,您可以使用复合文字来创建未命名的对象,并取其地址as suggested by @BLUEPIXY:
test = foo(&(double){ 1.23 });
目前还不清楚为什么你可能想要这样做,因为通常当一个指针被传递给一个函数时,想法是该对象将被修改并在修改后再次使用。没有标识符,在foo()
返回后,将无法访问复合文字创建的对象。
答案 1 :(得分:2)
是否可以传递固定值?
不完全,但请参见下文。
我可以定义一个新变量来传递,但这真的有必要吗?
这通常是最好的方法。
double x = 1.23;
test = foo(&x);
让我们考虑如果语言允许这样的表达式会发生什么:
test = foo(&1.23);
这会立即产生问题:指针指的是什么内存位置?那个记忆位置的寿命是多少?如果函数foo()
为该位置赋值,会发生什么?
要求变量指向使这些问题的答案明确。指针指的是存储变量值的内存位置。该内存位置的保证寿命对应于变量的范围。如果foo()
为指针赋值,则变量的值应该更改。
编辑:正如BLUEPIXY在a comment中指出的那样,C99确实为此提供了一种语法糖,称为compound literal,它充当左值。
test = foo(&(double){1.23});
这在语义上等同于以下内容:
double tmp = 1.23;
test = foo(&tmp);