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

发布了10 篇原创文章 · 获赞 20 · 访问量 437

猜你喜欢

转载自blog.csdn.net/zhaizhaizhaiaaa/article/details/104017565