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

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

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

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

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

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

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

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

c arrays pointers exception
2个回答
1
投票

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

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

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

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

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

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


0
投票

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

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

int *myArray = {1,2,3};
© www.soinside.com 2019 - 2024. All rights reserved.