读书人

一路动态内存分配的小题

发布时间: 2013-03-20 15:25:24 作者: rapoo

一道动态内存分配的小题


#include<iostream>
int main(){
using namespace std;
double*p3=new double[3];
p3[0]=0.2;
p3[1]=0.5;
p3[2]=0.8;
cout<<"p3[1] is " <<p3[1]<<".\n";
p3=p3+1;
cout<<"Now p3[0] is "<<p3[0]<<" and ";
cout<<"p3[1] is "<<p3[1]<<".\n";
p3=p3-1;
delete [] p3;
return 0;

下面是程序的输出:
p3[1] is 0.5
Now p3[0] is 0.5 and p3[1] is 0.8.

请问p3[1]为什么值是0.8了,而不是0.5呢?程序中p3=p3+1只是改变了p3的地址 但p3[1]是怎么变成p3[2]的? c++
[解决办法]
p3是一个指针指向new的数组的首地址(第一个元素的地址)
p3=p3+1;是指现在p3这个指针指向首地址的下一个地址了(也就是第二个元素了),所以...p3[0]现在就成了第二个元素,p3[1]就是第三个元素了
[解决办法]
p3=p3+1; 后 p3已指向0.5了

p3[1]等价于 *(p3+1) //加1之前就指向0.5了,加1之后指向0.8

读书人网 >C++

热点推荐