常规数组和指针数组有什么区别

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

我试图理解 C 中这两段代码之间的区别:


int array[] = { 1, 2, 3 }; // init a regular array


int *numList = {1, 2, 3}; //  init an array of pointers?

我知道第一行初始化一个常规整数数组。但是,第二行似乎正在初始化一个指针或指针数组(我不确定)。有人可以解释一下吗:

1.第二行代码到底发生了什么?

2.为什么第二行没有按预期编译(或者确实如此)?

3.与常规数组相比,我们什么时候想要使用这样的指针初始化(如果有的话)?

我试图了解是否存在特定场景,使用第二种方法比第一种方法更可取。

提前感谢您的帮助!

arrays c pointers
1个回答
1
投票

您混淆了一些概念。正如 @ikegami 指出的,你的第二行:

int *numList = {1, 2, 3};

被视为:

int *numList = 1;

这不是一个数组,也不是一个有效的指针。 如果要创建指针数组,请使用与普通数组相同的语法,类型为指针:

int* numList[] = {
    &array[0],
    &array[1],
    &array[2]
};

将创建一个由 3 个 int 指针组成的数组,指向原始数组的元素。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.