使用值[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]初始化数组(指针)的主要内容,如果未能解决你的问题,请参考以下文章