按指针增量迭代数组时设置值不起作用



在示例1中,设置元素是由[]运算符完成的,获取元素是由指针增量*(data++)完成的,看起来效果很好。另一方面,在示例2中,设置和获取元素都是通过指针增量完成的,似乎不起作用。从这个比较中,我可以猜测指针增量似乎与元素设置不兼容。

你能解释一下为什么会发生这种情况,以及如何解决这个问题吗?

#include<iostream>
int main(){
{
std::cout << "=== example 1 ===" << std::endl; 
int* data = new int [6];
for(int i=0; i<6; i++){
data[i] = i;
}
for(int i=0; i<6; i++){
std::cout << *(data++) << std::endl; 
}
}
{
std::cout << "=== example 2 ===" << std::endl; 
int* data = new int [6];
for(int i=0; i<6; i++){
*(data++) = i;
}
for(int i=0; i<6; i++){
std::cout << *(data++) << std::endl; 
}
}
}

输出

=== example 1 ===
0
1
2
3
4
5
=== example 2 ===
60753
0
0
0
0
0

您正在更改data,然后像没有更改一样再次使用它。只需声明一个新变量

std::cout << "=== example 2 ===" << std::endl; 
int* data = new int [6];
int* ptr = data;
for(int i=0; i<6; i++){
*(ptr++) = i;
}
ptr = data;             // move ptr back to the beginning of data
for(int i=0; i<6; i++){
std::cout << *(ptr++) << std::endl; 
}

最新更新