我试图理解 C 中这两段代码之间的区别:
int array[] = { 1, 2, 3 }; // init a regular array
int *numList = {1, 2, 3}; // init an array of pointers?
我知道第一行初始化一个常规整数数组。但是,第二行似乎正在初始化一个指针或指针数组(我不确定)。有人可以解释一下吗:
1.第二行代码到底发生了什么?
2.为什么第二行没有按预期编译(或者确实如此)?
3.与常规数组相比,我们什么时候想要使用这样的指针初始化(如果有的话)?
我试图了解是否存在特定场景,使用第二种方法比第一种方法更可取。
提前感谢您的帮助!
您混淆了一些概念。正如 @ikegami 指出的,你的第二行:
int *numList = {1, 2, 3};
被视为:
int *numList = 1;
这不是一个数组,也不是一个有效的指针。 如果要创建指针数组,请使用与普通数组相同的语法,类型为指针:
int* numList[] = {
&array[0],
&array[1],
&array[2]
};
将创建一个由 3 个 int 指针组成的数组,指向原始数组的元素。