徹底了解指標

2021-06-15 21:49:28 字數 1277 閱讀 4277

一 :關於指標和堆的記憶體分配

先來介紹一下指標 : 指標一種型別,理論上來說它包含其他變數的位址,因此有的書上也叫它:位址變數。既然指標是乙個型別,是型別就有大小,在達內的伺服器上或者普通的pc機上,都是4個位元組大小,裡邊只是儲存了乙個變數的位址而已。不管什麼型別的指標,char * ,int * ,int (*) ,string * ,float * ,都是說明了本指標所指向的位址空間是什麼型別而已,了解了這個基本上所有的問題都好象都變的合理了。

在c++中,申請和釋放堆中分配的存貯空間,分別使用new和delete的兩個運算子來完成:

指標型別 指標變數名=new 指標型別 (初始化);

delete 指標名;

例如:1、 int *p=new int(0);

它與下列**序列大體等價:

2、int tmp=0, *p=&tmp;

區別:p所指向的變數是由庫操作符new()分配的,位於記憶體的堆區中,並且該物件未命名。

下面是關於new 操作的說明 : 部分引自<>上說過以前的delete 方括號中是必須新增個數的,後來由於很容易出錯,所以後來的版本就改進了這個缺陷。

下面是個例子,vc上編譯通過

#include

using namespace std;

//#include //for vc

#include

void main(){

int n;

char *p;

cout<<"請輸入動態陣列的元素個數"<>n; //n在執行時確定,可輸入17

p=new char[n]; //申請17個字元(可裝8個漢字和乙個結束符)的記憶體空間strcpy(pc,「堆記憶體的動態分配」);//

cout《域

,比如在函式中建立的動態物件在函式返回後仍可使用。我們也稱堆空間為自由空間(free store)就是這個原因。但必須記住釋放該物件所佔堆空間,並只能釋放一次,在函式內建立,而在函式外釋放是一件很容易失控的事,往往會出錯,所以永遠不要在函式體內申請空間,讓呼叫者釋放,這是乙個很差的做法。你再怎麼小心翼翼也可能會帶來錯誤。

類在堆中申請記憶體 :

通過new建立的物件要呼叫建構函式,通過deletee刪除物件要呼叫析構函式。

cgoods *pc;

pc=new cgoods;   //分配堆空間,並構造乙個無名物件

//的cgoods物件;

…….

delete pc;   //先析構,然後將記憶體空間返回給堆;         堆物件的生命期並不依賴於建立它的作用域

初步了解指標

在電腦科學中,指標是程式語言中的乙個物件,利用位址,它的值直接指向存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為 指標 意思是通過它能找到以它為位址的記憶體單元。1.字元指標 char 概念 指的是指向的記憶體單元中儲存的是字元...

C this指標了解

1 this理解 所有非靜態成員函式的this指向它的呼叫者 2 呼叫建構函式時,派生類與基類構造中的this和p1都指向下面這個匿名堆物件的首位址 person p1 new man aaa 10,1 3 另外注意單例函式呼叫adduser this 實參this與函式體內的this不同 4 直接...

徹底了解instanceof的底層實現原理

一 作用 用於判斷某個例項是否屬於某建構函式 在繼承關係中用來判斷乙個例項是否屬於它的父型別或者祖先型別的例項 說白了,只要右邊變數的 prototype 在左邊變數的原型鏈上即可。因此,instanceof 在查詢的過程中會遍歷左邊變數的原型鏈,直到找到右邊變數的 prototype,如果查詢失敗...