cppTest-3.0:指針相關-3(二維數組的n種new方式)

/**
 *cppTest-3.0:指針相關-3(二維數組的n種new方式)
 *
 *轉載+原創
 *author 煒sama
 */
#include<iostream.h>
void main()
{
	typedef int A;
	const int m=2,n=2;//記住:定義數組時數組長度一定要用常量!!!

	//1、new二維數組方式
	//缺點:n必須是已知
	//優點:調用直觀,連續儲存,程序簡潔(經過測試,析構函數能正確調用)
	A (*ga)[n] = new A[m][n];//一次性就new了m*n內存,比方式2簡單得多!
	ga[0][0]=1;
	cout<<ga[0][0]<<endl;
	delete []ga;

	//2、new一維指針數組方式
	//缺點:非連續儲存,程序煩瑣
	//優點:調用直觀,n可以不是已知
	A** ga2 = new A*[m]; 
	A** ga22=new A* [m];//這種方式也可以!
	//A** ga22=new *A[m];//這種方式是錯誤的!
	for(int i = 0; i < m; i++)   
		ga2[i] = new A[n]; //還要new出每行的數組
	ga2[0][0]=2;
	cout<<ga2[0][0]<<endl;
	for(int j = 0; j < m; j++)   
		delete []ga2[j];//釋放每行數組
	delete []ga2;//最後還要釋放指針數組......

	//3、2的改進
	//優點:連續存儲,n可以不是已知,析構方便
	A** ga3=new A*[m];   
	//ga3[0]=new A[m*n];
	*ga3=new A[m*n];
	//for(int k=1;k<m;k++)   
		//ga3[k]=ga3[k-1]+n;
	ga3[0][0]=3;
	cout<<ga3[0][0]<<endl;
	delete []*ga3;
	//delete []ga3;

	//4、將二維數組當成一維數組來new
	//缺點:調用不夠直觀
	//優點:連續儲存,n可以不是已知
	A* ga4 = new A[m*n];
	ga4[0]=4;
	cout<<ga4[0]<<endl;
	delete []ga4;

	//5

	//6

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章