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

run*_*431 -5 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; 
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 6

在这个宣言中

int *arr = new int[10];
Run Code Online (Sandbox Code Playgroud)

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

在while循环中

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

指针递增.

arr++;
Run Code Online (Sandbox Code Playgroud)

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

delete[] arr;
Run Code Online (Sandbox Code Playgroud)

是错误的,因为指针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; 
Run Code Online (Sandbox Code Playgroud)