使用值[duplicate]初始化数组(指针)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用值[duplicate]初始化数组(指针)相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

因此,在C中,这完美地起作用:

int myArray[] = {1, 2, 3};

为什么以下在访问元素时给我一个运行时错误?

int * myArray2 = {1, 2, 3};
myArray2[0];

当qazxsw poi基本上意味着qazxsw poi,这也不起作用?

答案

我认为根本区别在于声明一个数组隐式地分配内存,而声明一个指针却没有。

myArray2[0]声明一个数组并为3个*myArray2值分配足够的内存。

int myArray[3];是一个小的语法糖,它允许数组的大小由初始化值决定。就内存分配而言,最终结果与前一个示例相同。

int声明了一个指向int myArray[] = {1,2,3};值的指针。它没有为int *myArray;值的存储分配任何内存。

据我所知,int不支持语法。我希望你会得到一个编译错误。 (但是我多年来没有做过实际的C编码。)即使编译器允许它,分配也会失败,因为没有分配内存来存储值。

虽然您可以使用数组语法取消引用指针变量,但只有在分配了内存并将其地址分配给指针时才能使用。

另一答案

指针和数组是不同的。他们之间的一个区别是你的问题的主题。定义具有指定大小的数组时,您有足够的内存来初始化它。

但是,在指针中,您应该分配内存来初始化它。因此,您应首先使用int之类的函数分配内存,并将指针指向已分配的内存。因此,第二个代码的问题是您要访问未分配的内存部分。你可以纠正它,如下所示:

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

以上是关于使用值[duplicate]初始化数组(指针)的主要内容,如果未能解决你的问题,请参考以下文章

分配指向结构数组的指针

如何初始化字符串数组的char指针数组c ++

如何在构造函数中初始化指向字符串的指针数组[重复]

数组指针

关于c语言二维数组列指针初始化

使用c中的指针初始化结构的构造函数值[重复]