在初始化指针数组时,为什么只有字符串不显示警告?

问题描述 投票:0回答:1

我没有制作特定的程序。我对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指针的初学者。请说明:)

c arrays pointers
1个回答
0
投票

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

您应该改用复合文字:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.