直接将指向字面量的指针传递给函数

3

给定以下C代码:

void calc(int *value)
{
   // do something with value
}


int main(void)
{
    int i;

    i = 10;
    calc(&i);
}

能否不设置i直接将10传递给函数calc? 如果可以,如何实现?

以下是我想到的示例(但不起作用):

calc( (int *) 10);

calc 可以改成只需要一个 int 吗? - edtheprogrammerguy
@antiihaapala,您报告的重复问题与C89一样古老。在其中,每个人都将复合字面量(http://en.cppreference.com/w/c/language/compound_literal)称为结构体或联合体,并且似乎不知道它为什么有效。我已经在那里添加了我的答案,但我认为这个问题应该重新打开。 - Frankie_C
请注意,在C语言中,正确的术语是“常量”,而不是“字面值”。 - Bathsheba
@Bathsheba,你选择重新打开似乎有些奇怪,这个重复看起来完美无缺... - Stargateur
@Stargateur:那个重复的目标是旧的C标准。如果你感觉强烈,请请求管理员合并这些帖子。 - Bathsheba
显示剩余2条评论
1个回答

0

在 C 语言中,指针指向常量是不可能的。

更新: 然而似乎有 一个技巧 可以通过使用 结构体 复合字面量 语法来实现(感谢 @antti-haapala 的更正)。请尝试以下代码:

calc(&(int){10});

3
这不是一个结构体,但确实是原帖作者想要的东西。 - Antti Haapala -- Слава Україні
1
这是一个指向变量的指针——该变量恰好是匿名且在内部。您也可以对它们进行赋值,例如(int){ 5 } = 6; - Alex Celeste
1
这不是一个技巧。根据C11标准(ISO/IEC 9899:2011)它是一个复合字面量:6.5.2.5 复合字面量(p: 85-87)。C99标准(ISO/IEC 9899:1999)也有相关规定:6.5.2.5 复合字面量(p: 75-77)。请参见https://dev59.com/-XI_5IYBdhLWcg3wBuJs#50273726。答案是错误的。这是可能的。 - Frankie_C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接