Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数组c++;解释_C++_Arrays - Fatal编程技术网

C++ 数组c++;解释

C++ 数组c++;解释,c++,arrays,C++,Arrays,嗨,我对数组有点困惑。我已经试着搜索过了,但还没有找到我想要的答案 对这样的数组感到困惑: Item **queue; 这是否意味着项正在为队列创建2d数组?那么阵列会是什么样子呢?请给我一个简单的解释,包括这一切。多谢各位 Item **queue; 它不是数组。它是指向某个项的指针。您可以使用它来引用包含指向项的指针数组的内存位置 这是否意味着项正在为队列创建2d数组 否。当您声明指向指针的指针时,不会创建任何数组。您只需创建一个可能引用2d数组的指针。2d阵列的创建取决于开发人员 这是

嗨,我对数组有点困惑。我已经试着搜索过了,但还没有找到我想要的答案

对这样的数组感到困惑:

Item **queue;
这是否意味着项正在为队列创建2d数组?那么阵列会是什么样子呢?请给我一个简单的解释,包括这一切。多谢各位

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

这是否意味着项正在为队列创建2d数组

否。当您声明指向指针的指针时,不会创建任何数组。您只需创建一个可能引用2d数组的指针。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++中使用运算符<代码>新< /代码>在堆中创建一个2D数组。

你提供的例子

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();

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

<>在C++中,<强>变量存储在内存中。内存中的数据具有值和地址。CPU不知道变量名,它们只知道内存地址。编译代码时,编译器(实际上是链接器)会将变量名(也称为符号)更改为分配给该变量的实际内存地址。因此,当您在代码中检索变量的值时,实际发生的是告诉CPU地址,然后CPU检索存储在内存地址中的数据

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

当您声明像
float*a
这样的变量时,这意味着
a
是指向
float
类型变量的指针。因此
a
的值不是浮点数,而是一个无符号整数。要更改
a
指向的位置,只需给
a
赋值,就像
a=&my\u float\u var。请注意,我使用
&
获取变量
my\u float\u var
的地址

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

您可以看到数组和指针是相似的。您可以声明字符数组,如下所示:

char str1[] = "some string";
char *str2  = "some string";
两种方法都很好。只有
str1
是一个符号,您不能更改它的值(它指向的位置),但可以更改
str2
的值,使它指向另一个字符串

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


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

这不是数组,而是指向项目指针的指针。据我所知。2个指针是一个2d数组。一个表示指向队列的指针,另一个表示array2d数组被声明为
que[10][20]
——但不能将它们与指向指针的指针结合使用。此站点的书签可能重复:我初始化时说queue=New Item*[maxNumItems];这还不能使它成为一个数组吗?