数组c ++解释

时间:2016-04-02 15:50:20

标签: c++ arrays

嗨,我对数组有点困惑。我试过搜索它们,但我找不到我想要的答案。

对这样的数组感到困惑:

<attr name=[attribute name]>
    <enum name="true" value="1"/>
    <enum name="false" value="2"/>
</attr>

这是否意味着要为队列创建二维数组?阵列会是什么样子?请给我一个简短的解释,涵盖所有这些。谢谢

3 个答案:

答案 0 :(得分:2)

Item **queue;

它不是一个数组。它是指向Item的指针。您可以使用它来引用包含指向项目指针数组的内存位置。

  

这是否意味着为队列创建了一个二维数组?

没有。声明指针指针时,不会创建任何数组。您只需创建一个可能引用二维数组的指针。 2d阵列的创建取决于开发人员。

这是一个如何初始化队列的示例:

int main()
{
  Item * array_1 = new Item[2]; // array of Items
  Item * array_2 = new Item[2]; // array of Items
  Item * array_3 = new Item[2]; // array of Items
  Item ** queue = new Item*[3]; // array of pointers 

  queue[0] = array_1;
  queue[1] = array_2;
  queue[1] = array_3;

  delete queue[0];
  delete queue[1];
  delete queue[1];
  delete queue;
}

注意,我在C ++中使用运算符new在堆中创建一个二维数组。

答案 1 :(得分:1)

您提供的示例

Item **queue;

不是数组,而是指向指针的指针,但是您可以为指针指定数组的地址(就像使用任何指针一样)。

所以有人创建像

这样的数组
Item* queues[100]; // An array of pointer to Item

并且您可以将指针指定给指针,例如

Item* queues[100]; // An array of pointer to Item
Item **queuepointers;

// .. assume that the queues pointers is allocated by some code here...
// ... then
queuepointers = queues;  
queues[50]->someMethodInItem();

答案 2 :(得分:0)

这是关于变量,指针和数组的解释。

在C ++中,变量存储在内存中。内存中的数据具有值和地址。 CPU不知道变量名,它们只知道内存地址。编译代码时,编译器(实际上是链接器)将变量名(a.k.a.符号)更改为为该变量分配的实际内存地址。因此,当您在代码中检索变量的值时,实际发生的事情是告诉CPU地址,并且CPU检索存储在该内存地址中的数据。

地址只是32位或64位(基于您的CPU架构)无符号整数。因此变量也可以包含其他变量的地址,称为指针。指针也是变量,唯一的区别是指针是32位或64位无符号整数,其数据是其他地方的地址。

当您声明类似float *a的变量时,这意味着a是指向float类型变量的指针。所以a的值不是浮点数,而是无符号整数。要更改a指向的位置,只需将值a分配给a = &my_float_var;。请注意,我使用&获取变量my_float_var的地址。

对于数组,它们只是彼此相邻分配的多个变量。例如,我们声明一个数组int arr[10],并说第一个元素arr[0]的地址是100,那么第二个元素arr[1]的地址是104int是4个字节,地址以字节为单位)。如果在代码中放置arr不带括号,则表示数组的地址,即第一个元素的地址。

你可以看到数组和指针是相似的。您可以声明char数组,如:

char str1[] = "some string";
char *str2  = "some string";

这两种方法都没问题。只有str1是一个符号,您无法更改其值(它指向的位置),但您可以更改str2的值,指向另一个字符串。

回到你的问题,Item **queue可以作为Item *类型的指针,或类型为Item *的数组。类型Item *可以是Item类型的指针,也可以是Item类型的数组。

因此,如果queueItem *类型的数组,而该数组的每个元素都指向另一个类型Item的数组,queue可以被认为是2d阵列。但这与传统的2d阵列不同。常规的2d数组使用arr[1,2]的语法来访问元素,但访问queue的元素应使用queue[1][2]