c - 用值初始化数组(指针)

标签 c arrays pointers exception

所以,在 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/

相关文章:

第一个计算程序的C问题

c - #定义一个没有值的对象

c - 指向结构体、字段的指针莫名其妙地改变值

C: 有没有办法降低 printf 输出的速度

android - 在 sh 中为 Android 定义一个数组

arrays - 使用 Transpose 函数会导致错误

c++ - 在数组中查找最相似的范围

c - 如何评估 c 中的结构并通过指针变量给出输入?

C: do-while 释放链表

c - 使用C进行串行通信时出错