我遇到了以下代码:
int* list = new int[5];
我从未见过这样的宣言。它有什么作用?我想list是指向int的指针?使用VS调试环境,我可以看到列表中有一个int值。那么如何访问其他元素?感谢。
答案 0 :(得分:1)
该声明被称为非常有礼貌的 动态(记忆)分配,涉及两个运营商,new
(new[]
)和{{1 (delete
)。 delete[]
运算符分配内存,new
运算符释放内存。
由于它是分配给指针的一块内存,因此它的行为与数组(delete
)大致相同,因此您应该像使用指针一样访问它。像
int list[5]
您可以在Stack Overflow here上看到有关C ++中动态分配的主题列表。
答案 1 :(得分:0)
这不是链表,而是一种称为动态内存的结构。如果要正常创建数组,可以编写类似
的内容int myArray[3] = {
1, 2, 3
};
请注意,当我写myArray
(3)的大小时,我使用常量表达式;如果我要写
int x = 3;
int myArray[x] = {
1, 2, 3
};
它不起作用,因为x
是一个变量,而不是一个常量表达式。请注意,即使x
是const
,这仍然无效。这是因为在程序运行之前,需要为数组分配内存。
当您说int * myData = new int[3]
时,您可以动态创建内存,而无需使用常量表达式。在这种情况下,这样做完全没问题
int x = 3;
int * myData = new int[x];
但是,myData
是一个指针,而不是一个数组,所以常见的sizeof(x) / sizeof(*x)
技巧在这里不起作用。
确保在动态内存不再使用后,编写delete[] myData
。这将取消分配内存块,并允许其他内存存储在其位置。
这个内存就像一个数组一样是一块内存。然而,链表完全不同,需要一段时间才能解释。查看上面的Wikipedia。