gcc编译错误:cast指定数组类型

dra*_*raw 14 c gcc

以下代码完全有效,

int *ia = (int[]){1,3,5,7};
Run Code Online (Sandbox Code Playgroud)

但是当我编译下一行代码时,

char *p = (char[]) "abc";
Run Code Online (Sandbox Code Playgroud)

gcc说

test.c:87: error: cast specifies array type
Run Code Online (Sandbox Code Playgroud)

它们似乎以同样的方式铸造.为什么第二个得到一个错误的消息?


正如你们所说,"abc"是一个指针,它不能转换为指针.所以我的另一个问题是:为什么呢

 char[] s = "abc";
Run Code Online (Sandbox Code Playgroud)

已验证.上面的代码行在编译时如何工作?

caf*_*caf 19

这是有效的,因为右侧的表达式是C99 复合文字,而不是强制转换:

int *ia = (int[]){1,3,5,7};
Run Code Online (Sandbox Code Playgroud)

但是,这是无效的,因为它是一个强制转换表达式,而不是复合文字.正如GCC告诉你的那样,你不能转换为数组类型:

char *p = (char[]) "abc";
Run Code Online (Sandbox Code Playgroud)

你可以通过使它成为一个合适的复合文字来修复它 - 它们用大括号表示:

char *p = (char[]){"abc"};
Run Code Online (Sandbox Code Playgroud)