0

我没有制作特定的程序。我对 C 语言中的某种语法东西很好奇。
我做了这些声明。

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

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

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

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

+) 第一个和第三个警告中的“标量初始化器”是什么意思?

+)

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

这显示错误而第一个不显示错误?


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

4

1 回答 1

0

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

您应该改用复合文字:

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

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

于 2020-06-11T19:03:59.853 回答