以下代码完全有效,
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)