【问题标题】:The brace in C language char array initializationC语言char数组初始化中的大括号
【发布时间】:2014-03-04 02:29:53
【问题描述】:

现在我遇到了如下问题:

int foo(void){
    char a[10] = "foo";
    char b[10] = {"foo"};
    ...
}

我使用 gdb 检查了 'a' 和 'b' 的内容,它们看起来完全一样。

变量a和b有区别吗?

【问题讨论】:

  • 没有区别。
  • 就像int i = 10;int i = { 10 };之间没有区别

标签: c string char


【解决方案1】:

它们是一样的:

C11 §6.7.9 初始化

一个字符类型的数组可以由一个字符串字面量或 UTF-8 字串字面量来初始化,可选地用大括号括起来。 字符串字面量的连续字节(包括终止空字符,如果有房间或如果数组大小未知)初始化数组的元素。

【讨论】:

    【解决方案2】:

    它们包含相同的值,但指向不同的地址。试一试:

    价值:

    (strcmp(a,b)==0) ? cout << "Same" : cout << "Diff";
    

    指针:

    (a==b) ? cout << "Same" : cout << "Diff";
    

    【讨论】:

    • 您的意思是它们是包含匹配值的不同变量。完全类似于int x = 10; int y = 10;
    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多