咱們知道每個程序的運行都須要內存,那麼C語言的變量的定義是什麼含義呢?函數
假如我花了200元買了一塊4G內存條,而後我定義了一個inta ;就意味着從這4G的內存上要拿走4個字節,又定義了一個intb;那麼b一樣也要從4G的內存條上拿走4字節。這就是C語言變量的通常含義,每個變量實質上都會從你剛買的4G內存條拿走一部分空間。操作系統
每個變量在內存條上拿空間有兩種方式,一種是程序運行前編譯系統事先給咱們安排內存空間,另一種是程序運行時,咱們開發者本身向操做系統申請內存空間。內存
第一種方式比較簡單,開發者基本不用關心任何問題,也是你們平時使用最多的一種方式,好比:開發
int a;編譯
double b;變量
char c;數據類型
char name[10];程序
而第二種方式初學者平時用的較少,程序運行以後,咱們還能夠爲變量申請內存空間?im
這個時候咱們須要使用malloc函數,好比咱們想要一塊int空間用來存放a變量。數據
int *p_a = (int *)malloc(sizeof(int));
你們發現這種方式和上面的直接定義一個inta;要麻煩不少。malloc就是內存申請函數,它只有一個參數,那就是你要申請的內存空間的大小。
這裏面的sizeof函數就是計算特定數據類型的大小。sizeof(int)就會獲得咱們這臺機器上int的大小。
那麼可能有同窗就會產生這樣的疑問,我直接定義一個inta 不就行了嗎,爲何要這麼麻煩呢?還要使用malloc函數,不是畫蛇添足嗎。關於這個問題,咱們在後面的文章會給你們作進一步的介紹。
第二種方式可能會產生一些問題:
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的用法。