7

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

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

4 回答 4

10

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

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

于 2012-10-05T13:10:59.523 回答
6

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

于 2012-10-05T13:02:20.410 回答
2

请参阅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();
}
于 2012-10-05T13:10:39.650 回答
-1

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

于 2012-10-05T13:06:39.553 回答