C++Primer第三版练习题答案-----------------2.3和2.4
分析:a定义了一个int型变量,并赋予了初值1024,内存分配属于静态分配
b定义了一个名叫pi的int型指针,静态开辟了一个空间,pi存放的是整形变量ival的地址
c用new分配了一个int型的对象,并给他赋初值为1024,pi2存放的是其存放1024的地址
d用new分配了一个int型的数组,数组元素个数有1024个,记住,pi3存放的是数组第一个元素的内存地址
分析:代码解释
/动态分配一个int型大小的内存空间,其内容初始化为10(即*p的内容为10),并将其地址存放到pi中
int *pi = new int( 10 );
/动态分配一个能容纳10个int的内存空间,未作初始化操作。
int *pia = new int[ 10 ];
//当*pi(也就是10)小于10的时候,执行循环语句,但是*pi此时为10,故while循环条件为假,不执行while里的代码
while ( *pi < 10 )
//pia[ 10 ] 赋值为10将其开始地址存放到pia中
pia[ *pi ] = *pi;
//*pi的内容累加1
*pi = *pi + 1;
//释放pi指向的整数内存
delete pi;
//释放pia指向的整数数组内存
delete [] pia;
解析:本段代码的目的是想要将pia数组进行初始化
问题:
1)循环语句条件判断为False,所以循环体中的语句根本不执行。
2) pia[]的index没有经过边界检测,在上例中,pia[]从0~9一共10个int元素,但是*pi的值为10,明显是数组越界访问