如何将固定值传递给指针?

时间:2017-08-01 06:54:04

标签: c pointers

我的功能需要一个引用作为输入:

test = foo(&xyz)

是否可以传递固定值?当然

test = foo(1.23)

不起作用。我可以定义一个新变量来传递,但这真的有必要吗?

由于

菲利普

2 个答案:

答案 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);