【问题标题】:How do I declare constant strings in C and what use are they?如何在 C 中声明常量字符串,它们有什么用?
【发布时间】:2016-07-14 22:16:41
【问题描述】:

如何声明常量字符串以及它们在编程中的用途?我不知道我这样做是否正确,但这是否是正确的做法?:

    const char my_string="Hello";

【问题讨论】:

标签: c string static constants


【解决方案1】:
const char my_string="Hello";

这是无效的 C。像 "hello" 这样的字符串文字的类型是 char[n],而不是 const char。正确的声明是

const char my_string[] = "Hello";

另外,将常量命名为 ALLCAPS 是个好主意。

【讨论】:

  • C 字符串文字的类型为char[]——不是const,也不是指针。 (与任何数组类型的表达式一样,它在大多数但不是所有上下文中都隐式转换为指针。)
  • @KeithThompson 已修复
  • 使用全部大写的约定通常适用于宏。 my_string 是声明的对象,不是宏,严格来说也不是常量。
【解决方案2】:

答案如下:

  • 方法一

    const char my_string[] = "Hello";

  • 方法二

    const char *my_string="Hello";

当您问为什么在 C 编程中使用它时,答案是当我们希望值保持不变并保护值不被覆盖时,我们将变量声明为常量。

【讨论】:

  • 然而,在这里,*my_string 是一个指向常量数据的非常量变量,因此该变量没有防止(过度)写入。
【解决方案3】:

C 编程语言中,const 的含义 比它在其他更近期的语言中的强大,语言。其实也可以说意思完全不一样。

引用http://www.geeksforgeeks.org/const-qualifier-in-c/ ... (强调和省略我的):

限定符 const 可以应用于任何声明 变量来指定它的值不会被改变 [...] 如果尝试更改,结果是实现定义的(!) 一个常量。

这里要注意的关键是,在 C (在其辩护中,可以追溯到 1970 年代)中, 关键字const 是一个限定符。不是一个“编译时常量!”

C 语言使用#define 声明作为最接近其他语言在出现关键字const 时使用的行为。

考虑以下网页,“C++ 'const' 声明,为什么和如何,” 作者 Andrew Hardwick 坦率地讨论了 C 和 C++ 语言中对这个关键字的处理: http://duramecho.com/ComputerInformation/WhyHowCppConst.html

将这些语言中的两种与其他语言对这个词的处理进行对比,他们认为这是一个声明 (不是限定词) ,并且他们普遍以完全不同的方式对待。

【讨论】:

  • 您讨论了const 的含义,但您实际上并没有回答问题。对于const 的含义,还有一个更简单的解释:它表示只读
  • 对我来说似乎非常清楚......当然,我可能完全弄错了...... OP“具有[几乎所有......]其他语言的含义”记住这个词const。因此,我的(冗长的)帖子。 “虽然你是绝对正确的,Keith,*在我们这些经常使用它的人所熟知的‘C’的上下文中,”我在我们面前看到一个源字符串“这将完全是在家里”几乎所有其他语言。”这是指导我回答的观点。
  • OP 询问如何声明“常量字符串”,并显示了一个添加* 的示例。这个问题不是 100% 明确的,但我很确定你还没有真正回答。
  • 你和我(!)知道什么是“正确添加*!”但是,*OP 知道吗?我的猜测(!)是,“只是也许,他没有。”(也许他对 C/C++ 比较陌生,在这种情况下:“规则 here完全不同。)最后,这是“只是想提供帮助”猜测。
  • 底线:你没有回答问题。
猜你喜欢
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2013-08-03
  • 2018-02-20
  • 2015-05-26
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多