char的指针数组与int的指针数组之间的区别

Zar*_*tra 0 c arrays pointers

这是一个C问题:

我不明白为什么这段代码有效:

char *c[] = {"hello","world"};
Run Code Online (Sandbox Code Playgroud)

但这并不是:

int *v[] = {{1,2},{3,4}};
Run Code Online (Sandbox Code Playgroud)

对我来说,它们是相同的东西(用各自类型初始化的指针数组)但显然它们不是.什么是exaclty那么差异呢?感谢名单.

编辑:如果对我的帖子投降的人可以说为什么这是一个糟糕的问题...这将是伟大的.

M.M*_*M.M 6

假设你在谈论C,差异是:

  • "hello" 定义一个字符数组
  • 数组可以衰减为指针

然而:

  • {1,2}没有定义ints 的数组.它指定了一个值列表,可用作类型int(或可转换)字段的初始值.

类似的情况int是使用复合数组文字:

int *v[] = { (int[]){1,2}, (int[]){3,4} };
Run Code Online (Sandbox Code Playgroud)

复合文字默认是可写的(不像字符串文字),所以你可以去v[0][0] = 5;,你不能用char版本.