<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【小白學(xué)習(xí)C++ 教程】十、C++中指針和內(nèi)存分配

          共 2711字,需瀏覽 6分鐘

           ·

          2021-08-11 15:05

          「@Author:Runsen」

          指針

          指針是保存內(nèi)存位置地址的變量。我們知道聲明的所有變量在內(nèi)存中都有一個特定的地址。聲明一個指針變量來指向內(nèi)存中的這些地址。

          聲明指針變量的一般語法是:

          int p, *ptr; //聲明變量p和指針變量ptr
          p = 4//賦值4給變量p
          ptr = &p; //將p的地址分配給指針變量ptr

          在內(nèi)存中,這些聲明將表示如下:

          在這里插入圖片描述

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

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

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

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

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

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

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

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

          在堆部分分配內(nèi)存發(fā)生在運(yùn)行時,而不是在編譯時,因此分配堆內(nèi)存稱為動態(tài)內(nèi)存分配。

          一般來說,C++不會在堆中分配一個內(nèi)存,因為在使用指針時通常會遇到的復(fù)雜性。所以只分配一個內(nèi)存塊,我們就要使用堆內(nèi)存,比如對于數(shù)組,我們會進(jìn)行動態(tài)內(nèi)存分配。

          在 C++ 中,new運(yùn)算符用于在運(yùn)行時分配內(nèi)存,內(nèi)存以字節(jié)為單位分配。該新操作符表示用于在堆動態(tài)存儲器分配的請求。如果有足夠的內(nèi)存可用,則new運(yùn)算符初始化內(nèi)存并將新分配和初始化的內(nèi)存的地址返回給指針變量。

          語法:

          datatype *pointer_name = new datatype

          具體例子

          int *ptr = new int;//在動態(tài)分配時,我們可以通過以下兩種方式聲明一個變量。
          int *ptr = new int (10);
          int *ptr = new int {15};
          // new運(yùn)算符還用于分配數(shù)據(jù)類型的內(nèi)存塊(數(shù)組)。
          int *ptr = new int[20];
          // 上面的語句為int類型的20個整數(shù)連續(xù)動態(tài)分配內(nèi)存,并返回指向序列的第一個元素指向“ptr”指針。

          一旦使用new關(guān)鍵字將堆內(nèi)存分配給變量或類對象,我們就可以使用delete關(guān)鍵字釋放該內(nèi)存空間。

          動態(tài)內(nèi)存分配概念的主要用途是通過指定其大小來聲明數(shù)組,但不確定它時將內(nèi)存分配給數(shù)組。

          看一個例子來理解數(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;
          }

          在代碼中,首先詢問用戶一個班級的學(xué)生人數(shù),并將其值存儲在 len 變量中。

          然后聲明一個整數(shù)數(shù)組,并使用此語句在內(nèi)存中動態(tài)分配等于 len 變量中存儲的值的空間 int *marks = new int[length];

          因此它被分配了一個等于“長度*(1個整數(shù)的大?。钡目臻g。


          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕一区二区在线观看 | 亚洲少妇在线观看 | 成人黄色性生活aV免费看 | 中文字幕人妻一区二区 | 999999精品 |