C ++链表声明

时间:2018-01-24 03:03:54

标签: c++ new-operator

我遇到了以下代码:

int* list = new int[5];

我从未见过这样的宣言。它有什么作用?我想list是指向int的指针?使用VS调试环境,我可以看到列表中有一个int值。那么如何访问其他元素?感谢。

2 个答案:

答案 0 :(得分:1)

该声明被称为非常有礼貌的 动态(记忆)分配,涉及两个运营商,newnew[])和{{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是一个变量,而不是一个常量表达式。请注意,即使xconst,这仍然无效。这是因为在程序运行之前,需要为数组分配内存。

当您说int * myData = new int[3]时,您可以动态创建内存,而无需使用常量表达式。在这种情况下,这样做完全没问题

int x = 3;
int * myData = new int[x];

但是,myData是一个指针,而不是一个数组,所以常见的sizeof(x) / sizeof(*x)技巧在这里不起作用。

确保在动态内存不再使用后,编写delete[] myData。这将取消分配内存块,并允许其他内存存储在其位置。

这个内存就像一个数组一样是一块内存。然而,链表完全不同,需要一段时间才能解释。查看上面的Wikipedia