我的指针算术有什么问题?

时间:2015-08-05 18:56:29

标签: c++

我需要帮助才能弄清楚为什么我的指针数组不起作用。我正在递增指针地址和I.我的控制台窗口只是悬挂。

int *arr = new int[10];
int i = 0;

while (i < 10){
    *arr = i;  // assign the value of arr to i
    arr++;     // increment the pointer by 1
    i++;       // increment i
}

delete[] arr; 

1 个答案:

答案 0 :(得分:6)

在此声明中

int *arr = new int[10];

指针arr由动态分配的数组的第一个元素的地址初始化。

在while循环中

while (i < 10){
    *arr = i;  // assign the value of arr to i
    arr++;     // increment the pointer by 1
    i++;       // increment i
}

指针递增。

arr++;

因此在循环之后它指向超出分配的数组和此语句

delete[] arr;

是错误的,因为指针arr现在不存储已分配数组的原始地址。

我认为你的意思是以下

const int N = 10;
int *arr = new int[N];

int i = 0;
for ( int *p = arr; p != arr + N; ++p ){
    *p = i++;  // assign the value of i to *p
}

for ( int *p = arr; p != arr + N; ++p ) std::cout << *p << ' ';
std::cout << std::endl;

delete[] arr;