我們知道每乙個程式的執行都需要記憶體,那麼c語言的變數的定義是什麼含義呢?
假如我花了200元買了一塊4g記憶體條,然後我定義了乙個inta ;就意味著從這4g的記憶體上要拿走4個位元組,又定義了乙個intb;那麼b同樣也要從4g的記憶體條上拿走4位元組。這就是c語言變數的一般含義,每乙個變數實質上都會從你剛買的4g記憶體條拿走一部分空間。
每乙個變數在記憶體條上拿空間有兩種方式,一種是程式執行前編譯系統事先給我們安排記憶體空間,另外一種是程式執行時,我們開發者自己向作業系統申請記憶體空間。
int a;
double b;
char c;
char name[10];
而第二種方式初學者平時用的較少,程式執行之後,我們還可以為變數申請記憶體空間?
這個時候我們需要使用malloc函式,比如我們想要一塊int空間用來存放a變數。
int *p_a = (int *)malloc(sizeof(int));
大家發現這種方式和上面的直接定義乙個inta;要麻煩很多。malloc就是記憶體申請函式,它只有乙個引數,那就是你要申請的記憶體空間的大小。
這裡面的sizeof函式就是計算特定資料型別的大小。sizeof(int)就會得到我們這台機器上int的大小。
第二種方式可能會產生一些問題:
1)如果我不停的從4g記憶體條拿空間,一直不停的拿,那麼可想而知,總有一天你會拿走所有的4g記憶體空間,從而使得程式沒有任何的記憶體可用。這就告訴我們乙個道理,在我們從4g記憶體條拿走空間用完之後,一定要記得歸還空間,否則系統就會因為空間不足而崩潰。那麼我們自己申請從4g記憶體條拿空間其實就是malloc,而free就是歸還,因此malloc和free在使用的時候是一對,拿完空間一定要記得歸還,這是一種優秀的品質。
int *p_a = (int*)malloc(sizeof(int)); //申請記憶體
free(p_a); // 用完之後需要歸還
2)因為是程式執行的時候,由開發者向作業系統申請空間,那麼就會存在這樣的一種情況,假如系統現在只有100mb的剩餘空間了,而你要申請200mb,那麼結果就是你的申請無法得到滿足。所以你在使用malloc申請記憶體的時候,千萬不要著急立馬就使用它,如果你申請的記憶體沒有得到滿足就馬上使用它的話,你的程式就會報錯。
以上就是給大家介紹的c語言變數的含義,希望大家重點掌握malloc和free的用法。
聊一聊 Nginx 變數(一)
變數可以認為是存放 值 的容器。而所謂 值 在許多程式語言裡,既可以是3.14這樣的數值,也可以是hello world這樣的字串,甚至可以是像陣列 雜湊表這樣的複雜資料結構。nginx 的變數和 perl php 等語言的類似,由美元符號 開頭,隨後跟著乙個字串,代表這個變數的名稱,例如 name...
聊一聊C語言的引數傳遞
本講我們和大家一起來聊一聊c語言中有關引數傳遞的一些知識。1.問題引入 請寫出以下程式的列印結果。include 將某整數加10 void add by 10 int a a a 10 int main int argc,char ar int a 2 add by 10 a printf a d ...
聊一聊js的變數提公升
今天做了變數提公升的題目,發現自己還是一知半解的狀態,以後搞清楚乙個技術點就寫下來記錄一下,儘管自己可能也不知道怎麼表達的會讓大家看的懂,就先慢慢的一步步前進吧,寫多了總比不寫好呀。function getclothing iscold else a.referenceerror freezing ...