【发布时间】:2013-10-22 14:36:26
【问题描述】:
我想知道数组在 c 中是如何工作的。我最终得到一个假设,我想知道我是否正确。
我们知道数组是一系列相邻的内存盒(盒子),其中每个盒子都有它所存储的类型的大小(即,如果 INT 一个盒子的 size = 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[],否则数组具有实际整数。 -
阅读comp.lang.c FAQ的第6部分。
标签: c++ c arrays pointers memory