【问题标题】:In initializing pointer array, why only string doesn't show warning?在初始化指针数组时,为什么只有字符串不显示警告?
【发布时间】:2020-06-11 18:59:49
【问题描述】:

我没有制作特定的程序。我对 C 语言中的某种语法问题感到好奇。
我做了这些声明。

int main()
{
    char *titles[] = {"NUDGE", "DECOUPLEING", "WORLD WAR Z"};
    char *letters[] = {{'a', 'b', 'c'}, {'x', 'y', 'z'}};
}

在第二个声明中,有 3 种警告。

  1. 标量初始化器周围的大括号
  2. 初始化使指针从整数而不进行强制转换
  3. 标量初始化器中的多余元素

我知道*numbers[] 之类的东西应该有指针值。
第一个声明是否因为字符串类型是指针而没有显示警告?
并且字符不是字符串?

+) 'scalar initializer' 在第一个和第三个警告中是什么意思?

+)

char titles[][] = {"NUDGE", "DECOUPLEING", "WORLD WAR Z"};

这是什么显示错误而第一个没有显示错误?


我是 C 指针的初学者。请解释:)

【问题讨论】:

  • char *titles[] = {"NUDGE", "DECOUPLEING", "WORLD WAR Z"}; 不显示错误,因为它是一个有效的声明。
  • char titles[][]chars 的二维数组。可以这样使用,例如:char titles[][] = {{'A', 'B', 'C'}, {'X', Y'', 'Z'}}.

标签: c arrays pointers


【解决方案1】:

第二次初始化无效,因为{'a', 'b', 'c'}不是可以指向指针的数组

您应该改用复合文字:

char *letters[] = {(char[]){'a', 'b', 'c'}, (char []){'x', 'y', 'z'}};

它定义了两 (2) 个指向三个字符数组的指针的数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2021-05-11
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多