資料儲存及堆疊

2021-08-01 15:40:28 字數 814 閱讀 5004

定義乙個變數,他沒有型別之分,但是他的資料是有型別之分的

基本資料型別是儲存在棧中的(堆疊是資料結構的內容,棧是有序的,堆是無序的)

引用資料型別是儲存在堆中的,但是一般是堆疊都需要用的

var a = [1,2]

var b = a

這個**中,a儲存的陣列[1,2]在堆中的位址.所以它在棧中的值是乙個位址,所以它賦給b的結果也是位址,所以a和b都指向陣列[1,2]的位址,

在這裡,要特別注意的也是容易搞混的是如下**

var a = [1,2];

var b = a;

console.log(b);

var b[0] = 5;

console.log(b);

var b =[1];

console.log(b);

在這裡第乙個console結果為[5,2]第二個為[5,2]第三個為[1]

需要明白的是b[0] = 5 是修改而b = [1]是重新賦值.

var  a = [1]   var  b= [1] 所以a===b是false因為位址不同,比較的值是棧中的值,不是堆的值.

有時候我們在寫**時,經常容易弄亂的地方就是引用型別,寫的時候要時常注意引用型別的位址有沒有變,位址中的資料修改後,有沒有其他地方引用這個位址,會不會產生影響

額外的小技巧: = 和 == ,寫==時經常容易寫成= ,我們可以把a==1寫成1==a,這樣就基本不會寫錯了,而且,這樣寫如果忘了,瀏覽器也會報錯,因為1=a.不能給常量賦值

C語言資料型別儲存位置及堆疊說明

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構...

資料在堆疊中儲存方式

一 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注malloc,calloc,new申請的...

堆 棧及靜態資料區詳解

五大記憶體分割槽 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧 就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆 就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式...