這篇文章主要介紹“C++中指針和內(nèi)存分配的方法”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++中指針和內(nèi)存分配的方法”文章能幫助大家解決問(wèn)題。
成都創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專(zhuān)注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開(kāi)發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開(kāi)發(fā),軟件開(kāi)發(fā),微信平臺(tái)小程序開(kāi)發(fā),十年建站對(duì)成都咖啡廳設(shè)計(jì)等多個(gè)領(lǐng)域,擁有多年建站經(jīng)驗(yàn)。
指針是保存內(nèi)存位置地址的變量。我們知道聲明的所有變量在內(nèi)存中都有一個(gè)特定的地址。聲明一個(gè)指針變量來(lái)指向內(nèi)存中的這些地址。
聲明指針變量的一般語(yǔ)法是:
int p, *ptr; //聲明變量p和指針變量ptr p = 4; //賦值4給變量p ptr = &p; //將p的地址分配給指針變量ptr
在內(nèi)存中,這些聲明將表示如下:
這是指針在內(nèi)存中的內(nèi)部表示。當(dāng)?shù)刂纷兞糠峙浣o指針變量時(shí),它指向的變量如上圖所示。
由于 ptr
具有變量 p 的地址,*ptr
將給出變量 p 的值(指針變量 ptr 指向的變量)。
為什么需要 C++ 中的指針?為了解釋對(duì)指針的需要,有必要回到基本內(nèi)存布局。
每當(dāng)執(zhí)行程序時(shí),程序指令都會(huì)駐留在代碼段中。并且所有的方法和數(shù)據(jù)都將駐留在堆棧中。代碼部分只能訪問(wèn)堆棧部分,但不能直接訪問(wèn)堆部分。
注意:由于代碼段不能直接訪問(wèn)堆段,所以不能直接使用堆內(nèi)存,會(huì)被浪費(fèi)掉,造成棧內(nèi)存溢出。
使用指針可以解決這個(gè)問(wèn)題。指針為代碼部分提供了對(duì)堆內(nèi)存的間接訪問(wèn)
在堆棧部分創(chuàng)建一個(gè)指針,該指針指向堆部分的內(nèi)存地址,從而間接訪問(wèn)堆部分。
在堆部分分配內(nèi)存發(fā)生在運(yùn)行時(shí),而不是在編譯時(shí),因此分配堆內(nèi)存稱(chēng)為動(dòng)態(tài)內(nèi)存分配。
一般來(lái)說(shuō),C++不會(huì)在堆中分配一個(gè)內(nèi)存,因?yàn)樵谑褂弥羔槙r(shí)通常會(huì)遇到的復(fù)雜性。所以只分配一個(gè)內(nèi)存塊,我們就要使用堆內(nèi)存,比如對(duì)于數(shù)組,我們會(huì)進(jìn)行動(dòng)態(tài)內(nèi)存分配。
在 C++ 中,new
運(yùn)算符用于在運(yùn)行時(shí)分配內(nèi)存,內(nèi)存以字節(jié)為單位分配。該新操作符表示用于在堆動(dòng)態(tài)存儲(chǔ)器分配的請(qǐng)求。如果有足夠的內(nèi)存可用,則new運(yùn)算符初始化內(nèi)存并將新分配和初始化的內(nèi)存的地址返回給指針變量。
語(yǔ)法:
datatype *pointer_name = new datatype
具體例子
int *ptr = new int;//在動(dòng)態(tài)分配時(shí),我們可以通過(guò)以下兩種方式聲明一個(gè)變量。 int *ptr = new int (10); int *ptr = new int {15}; // new運(yùn)算符還用于分配數(shù)據(jù)類(lèi)型的內(nèi)存塊(數(shù)組)。 int *ptr = new int[20]; // 上面的語(yǔ)句為int類(lèi)型的20個(gè)整數(shù)連續(xù)動(dòng)態(tài)分配內(nèi)存,并返回指向序列的第一個(gè)元素指向“ptr”指針。
一旦使用new關(guān)鍵字將堆內(nèi)存分配給變量或類(lèi)對(duì)象,我們就可以使用delete關(guān)鍵字釋放該內(nèi)存空間。
動(dòng)態(tài)內(nèi)存分配概念的主要用途是通過(guò)指定其大小來(lái)聲明數(shù)組,但不確定它時(shí)將內(nèi)存分配給數(shù)組。
看一個(gè)例子來(lái)理解數(shù)組的內(nèi)存分配用法。
#include <iostream> using namespace std; int main() { int len, sum = 0; cout << "Enter the no. of students in the class" << endl; cin >> len; int *marks = new int[len]; //Dynamic memory allocation cout << "Enter the marks of each student" << endl; for (int i = 0; i < len; i++) { cin >> *(marks + i); } for (int i = 0; i < len; i++) { sum += *(marks + i); } cout << "sum is " << sum << endl; return 0; }
在代碼中,首先詢(xún)問(wèn)用戶(hù)一個(gè)班級(jí)的學(xué)生人數(shù),并將其值存儲(chǔ)在 len 變量中。
然后聲明一個(gè)整數(shù)數(shù)組,并使用此語(yǔ)句在內(nèi)存中動(dòng)態(tài)分配等于 len 變量中存儲(chǔ)的值的空間 int *marks = new int[length];
因此它被分配了一個(gè)等于“長(zhǎng)度*(1個(gè)整數(shù)的大?。钡目臻g。
關(guān)于“C++中指針和內(nèi)存分配的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
網(wǎng)頁(yè)題目:C++中指針和內(nèi)存分配的方法
網(wǎng)頁(yè)網(wǎng)址:http://muchs.cn/article22/pdgcjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化、小程序開(kāi)發(fā)、云服務(wù)器、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)