分析: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,明顯是數組越界訪問