第二、三章小結

第二章主要是闡述了C語言的環境:編譯和執行。

在編譯中基本上編譯器分爲4部分動作:

1.由預處理器進行處理,執行一些文本操作,#define以及#include這些動作

2.編譯,-s把代碼翻譯成彙編語言

3.彙編,把彙編語言翻譯成二進制文件,也就是各個目標代碼

4.鏈接,最後把目標代碼捆綁在一起,同時引入標準庫的函數程序。

第三章主要是通過數據來描述各個類型:

1.爲了保持可移植性,把char限定在了有符號和無符號字符的交集之間。

2.不能修改字符串常量,因爲其在內存裏只有一份,如果更改會導致錯誤,比如"hello"變爲"world",其實是改變了內存裏面這個指針裏的值,也就是說"hello"再打印時,打印出了world,因爲打印的還是這個地址,地址裏面的東西變了,所以編譯器一般不允許更改。

3.不能把字符串常量賦值給一個字符數組,常量直接值時一個指針。

4.int* a,b,c;只有a是指向int的指針,其他都是int型。

5.常量const,簡而言之const在*以及名字之前,這個值時不能改的,指針可以改,在*之後名字之前,指針的指向不能改變。

接着就是一個作用域與鏈接屬性的問題,在不同作用域內,可以聲明相同的變量名稱,因爲他們不會用相同的內存如

{
   int f,g,i;
}
{
    int i;
}
如果在外面聲明瞭f,當進入小範圍的作用域,再次聲明定義,在這個範圍內,會覆蓋之前的值,退出作用域時還原。

如果在某個函數或者作用域內聲明瞭如下的表示形式

int i,j;
{
    int a,b;
    {
        static c;  //或者extern
    }
}
c離開作用域的時候還會存在。

extern 只對第一次聲明有用,static可以將extern變爲內部的靜態,如果一個全局變量或者一個函數缺省的狀態下都是設定爲extern

數據的存儲類型:普通內存、運行時堆棧、硬件寄存器。

1、在任何代碼塊之外聲明的變量總是存儲於靜態內存中。
2、代碼塊內部聲明的缺省變量都是自動的,存儲在堆棧中,如果聲明爲static可以變爲靜態。

3、register可以用於自動變量的聲明,稱爲寄存器變量,存儲在機器的硬件寄存器,如果聲明太多,只取前幾個,其他爲普通變量處理。

靜態變量隱式的初始化爲0.


發佈了33 篇原創文章 · 獲贊 16 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章