C++堆指針棧指針

C++堆指針棧指針

指針是一種靈活高效的內存訪問機制。
按有無申請動態分配的方式,分爲兩種類別:堆指針棧指針

在程序中定義一個變量,它的值會被放入內存中。
如果申請使用動態分配,它的值將放到中。
如果沒有申請動態分配,它的值將放到中。

tips:前提是定義了一個空指針

1、創建堆指針:

申請動態分配使用關鍵字new

p=new type;

其中,p表示指針,new是關鍵字,type是類型名。
new返回新分配的內存單元的地址。

指針函數:

int *GetHeapsPoint(int *p){
	p=new int;	//申請動態分配,令指針指向某個int型 
	int k1=111;
	*p=k1;		//指向k1 
	
	return p;
}

可以看到指針p創建後申請了動態分配,程序自動交給他一塊堆地址。

2、創建棧指針:

指針函數:

int *GetStackPoint(int *i){
	int k2=222;
	i=&k2;
	//無動態分配,直接指向k2的地址 
	return i;
}

可以看到指針i則是獲取了棧中k2的地址,屬於靜態分配。

3、動態內存的銷燬:

動態分配方式雖然靈活,但是隨之帶來新的問題。申請一塊堆內存後,系統不會再程序執行時依據情況自動銷燬它。
若想釋放該內存,則需要使用delete關鍵字。

delete p;

三位一體源代碼:

#include<iostream>
using namespace std;
int *GetHeapsPoint(int *p){
	p=new int;	//申請動態分配,令指針指向某個int型 
	int k1=111;
	*p=k1;		//指向k1 
	
	return p;
}
int *GetStackPoint(int *i){
	int k2=222;
	i=&k2;
	//無動態分配,直接指向k2的地址 
	return i;
}
int main(){
	
	int *p=NULL;
	p=GetHeapsPoint(p);
	cout<<"堆指針*p="<<*p<<" 地址爲:"<<p<<endl;
	int *i=NULL;
	i=GetStackPoint(i);
	cout<<"棧指針*i="<<*i<<" 地址爲:"<<i<<endl;
	delete p;
	cout<<"內存銷燬後堆指針*p="<<*p<<" 地址爲:"<<p<<endl;
	
	return 0;
}

結果圖:
HeapsStack

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