我想知道在C语言中数组是如何工作的,最后得出了一个假设,并想知道我是否正确。
我们知道数组是一系列相邻的内存盒子(boxes),每个盒子的大小都等于它所储存的类型的大小(例如,如果是INT,则一个盒子的大小为sizeof(int),而3个INT的数组在内存中占据3个相邻的sizeof(int)的位置)
现在我们还知道,我们可以动态分配一个特定类型的数组的内存(在C中使用malloc,C++中使用new)。
让我想到疑惑的是,数组的起源是数组的第一个盒子的地址,当用括号[0]调用它时,第一个值(后面的盒子中的值)是array [0] == *(array + 0)== * array(无论数组是声明为"type * array"还是"type array []"或"type array [size]"),并且这样调用的"array"无论是定义为指针还是数组("type * array"或"type array []"或"type array [size]"),都是第一个盒子的地址。
我最终认为并希望确认:即使用方括号[]声明了数组,在内存中它实际上是n个指针序列,每个指针包含(值而不是地址)实际值的内存盒子Bi的地址+那些内存盒子(B0,...,Bn每个都包含实际值)。因此,当一个人声明"int array [5]"时,程序实际上分配了5个相邻的int指针P0,P1,..,P4和分散在计算机内存中的5个int大小的内存位置B0,B1,...,B4,其中Pi的值是Bi的地址。
我是正确还是错误!!?? 谢谢!
int *arr[]
,否则数组中包含实际的整数。 - chris