c ++数组和内存位置

时间:2019-01-22 00:17:09

标签: c++ arrays

我有一段处理C ++数组的代码。

 using namespace std;
 #include <iostream>

 int main(){
 int *p;
 p = new int[3];
 for(int i = 0; i < 3; i++){
    p[i] = i;
 }
 //delete[] p;
 for(int i = 0;i <3; i++){
    std::cout << *(p+i) << std::endl;
 }
}

此代码如何工作?内存位置*(p + i)如何工作?与使用p [i]有何不同?如果我们取消注释delete [] p。

行,代码有什么区别?

1 个答案:

答案 0 :(得分:4)

1)执行此操作时:

p = new int[3];

现在,p指向动态分配的数组的第一个元素。

这样做时,*(p + i)将导致简单的指针运算。它将简化为:value of (<address pointed by p> + <size of type pointed by p> * i),这等同于进行p[i]

这就是它起作用的原因。

2)在C ++中,与Java不同,您必须使用delete显式清除动态分配的内存,因为C ++中没有GC(根据Bjarne Stroustrup的说法,永远不会存在)。否则,在应用程序生命周期内将保留已获取的内存区域,从而导致内存泄漏。

建议:

delete放在程序末尾。否则,它下面的循环可能会产生SIGSEGV。

另外,请尽量避免使用newdelete