C++中指針和內(nèi)存分配的方法

這篇文章主要介紹“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)存中,這些聲明將表示如下:

C++中指針和內(nèi)存分配的方法

這是指針在內(nèi)存中的內(nèi)部表示。當(dāng)?shù)刂纷兞糠峙浣o指針變量時(shí),它指向的變量如上圖所示。

由于 ptr具有變量 p 的地址,*ptr 將給出變量 p 的值(指針變量 ptr 指向的變量)。

為什么需要 C++ 中的指針?為了解釋對(duì)指針的需要,有必要回到基本內(nèi)存布局。

C++中指針和內(nèi)存分配的方法

每當(dāng)執(zhí)行程序時(shí),程序指令都會(huì)駐留在代碼段中。并且所有的方法和數(shù)據(jù)都將駐留在堆棧中。代碼部分只能訪問(wèn)堆棧部分,但不能直接訪問(wèn)堆部分。

C++中指針和內(nèi)存分配的方法

注意:由于代碼段不能直接訪問(wèn)堆段,所以不能直接使用堆內(nèi)存,會(huì)被浪費(fèi)掉,造成棧內(nèi)存溢出。

使用指針可以解決這個(gè)問(wèn)題。指針為代碼部分提供了對(duì)堆內(nèi)存的間接訪問(wèn)

在堆棧部分創(chuàng)建一個(gè)指針,該指針指向堆部分的內(nèi)存地址,從而間接訪問(wèn)堆部分。

C++中指針和內(nèi)存分配的方法

C++ 中使用指針的動(dòng)態(tài)內(nèi)存分配:

在堆部分分配內(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)

成都網(wǎng)站建設(shè)公司