總結
對於指標陣列的理解:
按照字面意思,首先是指標,其次是陣列,就表明這是乙個陣列,不過陣列裡面儲存的指標。
```// 使用指標陣列
int **ptr = new int*[4];
for(int i = 0; i < 4; ++i)
```如**所示:new int * [4],表明這是乙個陣列,陣列裡面儲存的是 int *型別的指標。
而等號左值 int ** ptr,首先要看(int *)*ptr ,表明這乙個指標,其指向了int *型別的變數。
在看for迴圈內的內容,這是對陣列內指標進行初始化,將陣列內的每個指標指向了乙個int[3]的陣列,
當然這裡int [3],也可以改為int[4]等,當然也可以為陣列內,每個指標,分別制定不等長的陣列。
對於陣列指標的理解:
參照一位陣列指標的定義
```int * a = new int [3];
```和
```
// 使用陣列指標
int (*p)[3] = new int [4][3];
printf("陣列指標:\np:\t%d\n&p[0]:\t%d\n*p:\t%d\np[0]:\t%d\n&p[0][0]:%d\n\n"
,p,&p[0],*p,p[0],&p[0][0]);
```等號右值,都是陣列,等號左值依然是int *p ,不過因為其實二維陣列,所以
在其後,增加了指示二維的[3],以表明,其第二維的維度為3
問題:對於下面的**:
```class mystring;
mystring *pstringarray = new mystring[13];
```以下兩種delete有什麼區別?
```delete pstringarray;
delete pstringarray;
```方括號的存在會使編譯器獲取陣列大小(size)然後析構函式再被依次應用在每個元素上,一共size次。否則,只有乙個元素被析構。
部落格原文:
#include
#include
#include
#include
#include
using namespace std;
int main()
printf("指標陣列一步步申請:\nptr:\t%d\n&ptr[0]:%d\n*ptr:\t%d\nptr[0]:\t%d\n&ptr[0][0]:%d\n\n"
,ptr,&ptr[0],*ptr,ptr[0],&ptr[0][0]);
// 使用陣列指標
int (*p)[3] = new int [4][3];
printf("陣列指標:\np:\t%d\n&p[0]:\t%d\n*p:\t%d\np[0]:\t%d\n&p[0][0]:%d\n\n"
,p,&p[0],*p,p[0],&p[0][0]);
// 釋放記憶體
for(int i = 0; i < 4; ++i)
delete ptr;
delete p;
delete a;
return 0;}輸出
```一維陣列:
a: 3615416
*a: 3615824
&a[0]: 3615416
指標陣列一步步申請:
ptr: 3615440
&ptr[0]:3615440
*ptr: 3615464
ptr[0]: 3615464
&ptr[0][0]:3615464
陣列指標:
p: 3615560
&p[0]: 3615560
*p: 3615560
p[0]: 3615560
&p[0][0]:3615560
陣列記憶體申請和釋放,指標陣列和陣列指標
一 陣列指標的空間釋放 int p 3 new int 4 3 delete p 1 delete p 2 在釋放這個二維陣列時,應該使用1和2哪種方式呢?哪種對呢?其實兩種方法都是可以的,二維陣列,p 和 p 指向的位置相同的,都是指向第乙個元素的位址是 p 0 0 對於c c 如何檢測記憶體洩露...
動態申請的指標陣列的記憶體申請和釋放問題
char ppchar 0 void fun void main delete ppchar 釋放ppchar負責的記憶體空間 endif char array 10 未知行 每行10列 char arr 2 10 2行 每行10列 for int i 0 i 2 i delete arr 對二維陣...
記憶體的申請和釋放
常規用法 virtualalloc lpvoid lpaddress,size t dwsize,dword flallocationtype,dword flprotect lpaddress,指定記憶體開始的位址。dwsize,分配記憶體的大小。flallocationtype,分配記憶體的型別...