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

时间:2018-03-01 01:03:26

标签: c arrays pointers exception

所以,在C中,这完美有效:

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

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

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

myArray2[0]基本上是*myArray2,这也不起作用?

2 个答案:

答案 0 :(得分:1)

我认为根本区别在于声明数组会隐式分配内存,而声明指针则不会。

int myArray[3];声明一个数组并为3 int个值分配足够的内存。

int myArray[] = {1,2,3};是一个小小的语法糖,它允许数组的大小由初始化值决定。在内存分配方面,最终结果与前一个示例相同。

int *myArray;声明指向int值的指针。它不会为int值的存储分配任何内存。

据我所知,

int *myArray = {1,2,3};语法不受支持。我希望你会得到一个编译错误。 (但是我多年来都没有完成实际的C编码。)即使编译器通过,分配也会失败,因为没有分配内存来存储值。

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

答案 1 :(得分:0)

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

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

int *myarray2 = malloc(3*sizeof(int));
myarray2[0] = 1;
myarray2[1] = 2;
myarray2[2] = 3;