亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ 內(nèi)存分區(qū)模型的使用(代碼區(qū)、全局區(qū)、棧區(qū)、堆區(qū)、new)

 更新時(shí)間:2021年04月25日 11:23:51   作者:小猿筆記  
這篇文章主要介紹了C++ 內(nèi)存分區(qū)模型的使用(代碼區(qū)、全局區(qū)、棧區(qū)、堆區(qū)、new),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

內(nèi)存分區(qū)模型

在這里插入圖片描述

1 代碼區(qū)

在這里插入圖片描述

在這里插入圖片描述

2 全局區(qū)

// 全局變量、靜態(tài)變量、常量

在這里插入圖片描述

#include <iostream>
using namespace std;

// 全局變量、靜態(tài)變量、常量

//全局變量
int g_a=10;
int g_b=10;

//const修飾的全局常量
const int c_g_a = 10;
const int c_g_b = 10;

int main()
{
	//創(chuàng)建普通局部變量
	int a = 10;
	int b = 10;
	cout << "局部變量a的地址為:" << (int)&a << endl;//&a取地址,(int)強(qiáng)制轉(zhuǎn)換為10進(jìn)制
	cout << "局部變量b的地址為:" << (int)&b <<endl<<endl;

	//全局變量
	cout << "全局變量g_a的地址為:" << (int)&g_a << endl;
	cout << "全局變量g_b的地址為:" << (int)&g_b << endl<<endl;

	//靜態(tài)變量
	static int s_a = 10;
	static int s_b = 10;
	cout << "靜態(tài)變量s_a的地址為:" << (int)&s_a << endl;
	cout << "靜態(tài)變量s_b的地址為:" << (int)&s_b << endl << endl;

	//常量(字符串常量、const修飾的變量)
	//字符串常量
	cout << "字符串常量的地址為:" << (int)&"hello word" << endl;
	
	//const修飾的變量(全局常量、局部常量)
	//const修飾的全局變量
	cout << "全局常量 c_g_a的地址為:" << (int)&c_g_a << endl;
	cout << "全局常量 c_g_b的地址為:" << (int)&c_g_b << endl;

	//const修飾的局部變量
	const int c_a = 10;
	const int c_b = 10;
	cout << "局部常量 c_a的地址為:" << (int)&c_a << endl;
	cout << "局部常量 c_b的地址為:" << (int)&c_b << endl << endl;

	system("pause");
	return 0;
}

在這里插入圖片描述

在這里插入圖片描述

總結(jié)

在這里插入圖片描述

3 棧區(qū)

在這里插入圖片描述

棧區(qū)注意事項(xiàng)

  • 不要返回局部變量的地址
  • 棧區(qū)的數(shù)據(jù)由編譯器管理開辟和釋放
#include <iostream>
using namespace std;

//棧區(qū)注意事項(xiàng)
//不要返回局部變量的地址
//棧區(qū)的數(shù)據(jù)由編譯器管理開辟和釋放

int *func(int b)//形參數(shù)據(jù)也存放在棧區(qū)
{
	b = 100;
	int a = 10;//局部變量:存放在棧區(qū),棧區(qū)的數(shù)據(jù)在函數(shù)執(zhí)行完畢自動(dòng)釋放
	return &a;//返回局部變量的地址
}
int main()
{
	//接受func函數(shù)的返回值
	int *p=func(1);
	cout << *p << endl;//第一次可以打印正確的數(shù)字,因?yàn)榫幾g做了一次保留
	cout << *p << endl;//第二次,就沒(méi)了,輸出亂碼

	system("pause");
	return 0;
}

在這里插入圖片描述

4 堆區(qū)

在這里插入圖片描述

在這里插入圖片描述

#include <iostream>
using namespace std;
int *func()
{
	//利用new關(guān)鍵字,將數(shù)據(jù)開辟到堆區(qū)
	//指針本質(zhì)也是局部變量,存放在棧上,指針保存的數(shù)據(jù)存放咋堆區(qū)
	int* p = new int(10);
	return p;
}
int main()
{
	//在堆區(qū)開辟數(shù)據(jù)
	int* q = func();
	cout << *q << endl;//與上一個(gè)程序?qū)Ρ?,多輸出幾?
	cout << *q << endl;
	cout << *q << endl; 
	cout << *q << endl;

	system("pause");
	return 0;
}

在這里插入圖片描述

5 new運(yùn)算符

在這里插入圖片描述

#include <iostream>
using namespace std;

//1.new的基本語(yǔ)法
int* func()
{
	//在堆區(qū)創(chuàng)建整形數(shù)據(jù)
	//new返回的是數(shù)據(jù)類型指針
	int* p = new int(10);
	return p;
}
//2.在堆區(qū)利用new 開辟數(shù)組
int main()
{
	//在堆區(qū)開辟數(shù)據(jù)
	int* q = func();
	cout << *q << endl;//與上一個(gè)程序?qū)Ρ龋噍敵鰩状?
	cout << *q << endl;
	cout << *q << endl;

	//堆區(qū)數(shù)據(jù)是由程序員管理開辟、管理釋放
	//如果想釋放堆區(qū)數(shù)據(jù),利用關(guān)鍵字delete
	delete q;
	cout << *q << endl;//內(nèi)存已被釋放,再次訪問(wèn)就是非法操作,報(bào)錯(cuò)

	system("pause");
	return 0;
}

在這里插入圖片描述

在這里插入圖片描述

#include <iostream>
using namespace std;

//1.new的基本語(yǔ)法


//2.在堆區(qū)利用new 開辟數(shù)組
void test()
{
	//創(chuàng)建10整形數(shù)據(jù)的數(shù)組,在堆區(qū)
	int *arr =new int[10];//10代表數(shù)組有10個(gè)元素

	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100;//給10個(gè)元素賦值,100~109
	}
	for (int i = 0; i < 10; i++)
		cout << arr[i] << endl;

	//釋放堆取數(shù)組
	//釋放數(shù)組的時(shí)候,要加[]才可以,否則認(rèn)為是只是放一個(gè)元素
	delete[] arr;
}
int main()
{
	test();
	system("pause");
	return 0;
}

在這里插入圖片描述

注意:

  • 釋放堆取數(shù)組
  • 釋放數(shù)組的時(shí)候,要加[]才可以,否則認(rèn)為是只是放一個(gè)元素

參考:

嗶哩嗶哩 黑馬程序員

到此這篇關(guān)于C++ 內(nèi)存分區(qū)模型的使用(代碼區(qū)、全局區(qū)、棧區(qū)、堆區(qū)、new)的文章就介紹到這了,更多相關(guān)C++ 內(nèi)存分區(qū)模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論