cppTest-3.0:指針相關-3(new&delete)

/**
 *cppTest-3.0:指針相關-3(new&delete)
 *
 *author 煒sama
 */
#include<iostream.h>
void main()
{
    int *pi;
	pi=new int;
	*pi=888;
	cout<<*pi<<endl;
	delete pi;

	int *pi2=new int(123);
	cout<<*pi2<<endl;
	delete pi2;

	int *pis=new int[2];
	pis[0]=0;
	pis[1]=1;
	cout<<pis[0]<<endl;
	cout<<pis[1]<<endl;
	*pis=100;
	*(pis+1)=200;
	cout<<pis[0]<<endl;
	cout<<pis[1]<<endl;
	cout<<*(pis+1)<<endl;
	//cout<<pis<<endl;
	delete []pis;//[]是必須的!它告訴編譯器pis指向的是數組而不是單個對象。
	//delete pis;//這種釋放方式是錯的!即使運行時沒錯,但是有可能無法釋放pis指向的空間!
	
	//delete pis[];//這種釋放方式是錯的!

	//不能在new的同時給數組初始化!
	//int *pis2=new{1,2};
	//int *pis3=new int{1,2};
	//int *pis4=new int[]{1,2};
	//int *pis4=new int[2]{1,2};
	int is[2]={1,2};

	/*int *pis2=new int[];//雖然不指定數組大小沒有編譯報錯,但是運行時報錯,故不建議這麼做!
	pis2[0]=0;
	pis2[1]=1;
	cout<<pis2[0]<<endl;
	cout<<pis2[1]<<endl;
	delete []pis2;*/

	//new多維數組時,左值一定要指定每一維大小,並且右值至多最高維可以不指定大小。不然編譯報錯!

	//int (*piss0)[]=new int[][];//報錯!
	//int (*piss1)[]=new int[][2];//報錯!
	//int (*piss2)[]=new int[2][];//報錯!
	//int (*piss3)[]=new int[2][2];//報錯!
	//int (*piss4)[2]=new int[][];//報錯!
	int (*piss5)[2]=new int[][2];
	//int (*piss6)[2]=new int[2][];//報錯!
	int (*piss7)[2]=new int[2][2];

	int (*pisss)[2][2]=new int[][2][2];
	//delete [][]pisss;//錯誤!!!
	delete []pisss;

	int i=2,j=2,k=2;
	int (*pisss2)[2][2]=new int[i][2][2];//只有第一維可以是變量表達式!!
	//int (*pisss3)[2][2]=new int[i][j][2];//錯誤!
	//int (*pisss4)[2][2]=new int[i][j][k];//錯誤!

	//const int *pci=new const int(128);
}

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