【问题标题】:How can a string literal be used as other lvalues?如何将字符串文字用作其他左值?
【发布时间】:2018-01-21 05:47:14
【问题描述】:

字符串文字是一个左值。

可以使用左值:

  1. 作为地址运算符的操作数(除非左值指定位域或被声明为寄存器)。

  2. 作为前/后递增和递减运算符的操作数。

  3. 作为成员访问(点)运算符的左侧操作数。

  4. 作为赋值运算符和复合赋值运算符的左侧操作数。

  5. as ...(任何可以用作值但我想列出的东西)

我想知道如何在 C 程序中将字符串文字用作上述运算符的操作数?

谢谢。

【问题讨论】:

  • 说字符串文字是只读的左值有帮助吗?
  • C99 及更高版本(或更早的带有扩展名)提供 compound literal 允许您使用一点 slight-of-hand (或programming legerdemain)创建一个可修改的左值,否则会创建一个文字,例如char *literal = (char[]){"my string literal"};。是的,它只是一个数组,但它也是一个文字。

标签: c


【解决方案1】:

您的项目符号 2 和 4 需要一个 modifiable lvalue ,它不包括数组。字符串字面量是数组,因此它们不是可修改的左值。

第一个没问题,&"hello" 是允许的,虽然这是不常见的用法。

第三个,. 的左侧必须具有结构类型,而字符串文字没有。但是请注意,. 的左侧操作数实际上不需要是左值。

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2012-08-31
    • 1970-01-01
    相关资源
    最近更新 更多