一路动态内存分配的小题
一道动态内存分配的小题
下面是程序的输出:
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]的?
------解决方案--------------------
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
#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