所以,在 C 语言中,这完全有效:
int myArray[] = {1, 2, 3};
为什么以下内容在访问元素时会出现运行时错误?
int * myArray2 = {1, 2, 3};
myArray2[0];
当 myArray2[0]
基本上意味着*myArray2
,这也不起作用?
最佳答案
我认为根本的区别在于声明数组隐式分配内存,而声明指针则不会。
int myArray[3];
声明一个数组并为 3 个 int
值分配足够的内存。
int myArray[] = {1,2,3};
是一个小语法糖,它让数组的大小由初始化值确定。就内存分配而言,最终结果与前面的示例相同。
int *myArray;
声明一个指向 int
值的指针。它不会分配任何内存来存储 int
值。
int *myArray = {1,2,3};
不受支持的语法。我希望你会因此得到一个编译器错误。 (但我已经很多年没有完成实际的 C 编码了。)即使编译器允许它通过,分配也会失败,因为没有分配内存来存储值。
虽然您可以使用数组语法引用指针变量,但这仅在您已分配内存并将其地址分配给指针时才有效。
关于c - 用值初始化数组(指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49041099/