【问题标题】:What's the difference between "hello" and {"hello"}?“你好”和{“你好”}有什么区别?
【发布时间】:2012-10-05 12:55:58
【问题描述】:

在C/C++中,下面两行代码有什么区别:

char *str1="hello";  
char *str2={"hello"};  

【问题讨论】:

  • 没有区别。他们都破坏了编译
  • @BЈовић 至少在 C++ 中,但在 C 中不是(谁知道 "C/C++" 是什么)。
  • @PeteBecker 唯一的问题是“C/C++ 中的 X?”可能的意思是“C中的X? C++ 中的 X?”。这很糟糕,因为在同一个问题中提出多个问题是很糟糕的。在发表此评论时,有一个答案仅适用于 C++,而另一个答案仅适用于 C。meta.stackexchange.com/questions/39223/…
  • @PeteBecker 我当然知道,讽刺是故意的。事实上,这个问题是 C/C++ 完全不合适的情况之一(尽管我同意它有时是合适的,但通常不是,因为 OP 通常不知道它的影响),因为两种语言的答案都不同。我知道 C 和 C++ 的答案通常是相同的(至少对于纯语言和标准相关的问题),但这里肯定不是。
  • @BЈовић:这实际上并没有破坏编译。它在 C++ (write-strings IIRC) 中发出警告,并在 C 中编译得很好。

标签: c++ c pointers initialization


【解决方案1】:

根据 2011 C 标准,第 6.7.9 条初始化,第 11 段:“标量的初始化程序应为单个表达式,可选用大括号括起来……”

就是这样。没有语义差异;大括号可能存在​​也可能不存在,含义没有变化。

【讨论】:

    【解决方案2】:

    仅在这种情况下使用样式。他们都导致同样的事情,他们都是坏的形式。你应该使用const char * str1="hello";

    【讨论】:

    • {"hello"} 不被视为数组吗?我们知道定义我们在 {} m 中编写的数组只是对此感到困惑,如果 char *str2={"hello","hi"};在这种情况下
    • @JensGustedt 请问标量类型的定义是什么?
    • @yejinxin,这确实是C语言的一个基本概念,就是整数类型、浮点类型和指针类型
    • @JensGustedt,好吧,我想我的英语太差了......我现在知道了。
    【解决方案3】:

    https://stackoverflow.com/a/3462768/153225

    大括号是多余的。

    使用“gcc -S”从以下代码生成汇编程序确认它们生成完全相同的东西(每种情况下的常数略有不同):

    #include <iostream>
    using namespace std;
    
    void test1() {
        const char *str1="hello1";
        cout << str1 << endl;
    }
    
    void test2() {
        const char *str2={"hello2"};
        cout << str2 << endl;
    }
    
    int main() {
        test1();
        test2();
    }
    

    【讨论】:

      【解决方案4】:

      数组和“字符串”没有区别,因为字符串是字符数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 2021-11-19
        • 1970-01-01
        • 2010-09-23
        相关资源
        最近更新 更多