C PRIMER讀書筆記 之 陣列與指標

2021-06-25 10:02:58 字數 2855 閱讀 2863

1.維數必須用值大於等於1的常量表示式定義。 此常量表示式 只能包含整形字面值、列舉常量或者用常量表示式初始化的整形const物件。

注意  :非const變數以及要到執行階段才知道值得const變數不能用於定義陣列維數。

例:

const unsigned sz = get_size();

int test_score[sz];                      //錯誤 size not known until run time

2.用字串字面值初始化字元陣列時,末尾包含額外的空字元用於結束字串。

char ca3="c++";   //null terminator added automatically

const char ca3[6] = "daniel";   //error:daniel is 7 elements

3.c++不允許乙個陣列用另乙個陣列初始化,也不能將乙個陣列賦值給另乙個陣列,操作非法

某些編譯器允許將陣列賦值作為編譯器擴充套件。應避免使用這種功能

1.

宣告指標的風格

宜採用 string  *ps1,*ps2;

盡量不採用 string*  ps1,ps2;    //  ps1是指標  但是ps2是string  容易混淆

2.指標可能的初值

三種狀態之一 :

儲存乙個特定物件的位址;

指向某個物件後面的另一物件;

或者是0值,若是0值,表明它不指向任何物件。  int *pi = 0;

也可使用從c語言整合下來的預處理變數null,在標頭檔案cstdlib中定義,其值為0.把指標初始化未null等效於初始化未0值。

如果可能的話,除非所指向的物件已經存在,否則不要定義指標,這樣可以避免定義乙個未初始化的指標。

如果必須分開定義指標和其所指向的物件,則將指標初始化未0。因為編譯器可以檢測出0值得指標,程式可判斷該指標未指向乙個物件。

3.指標於const限定符

指向const物件的指標:

理解為 「自以為指向const的指標」  不能通過此指標修改指向物件的值(指向的物件可能不是非const),指標本身指向能夠改變。

const double pi = 3.14;

double dval = 3.14;

const double *cptr = π

cptr = &dval;

const指標:

指標本身的值不能改變,但指標所指物件的值能否修改完全取決於該物件的型別

int errnumb = 0;

int *const curerr = &errnumb;

指向const物件的const指標:

const double pi = 3.14159;

const double *const pi_ptr = π

既不能修改pi_ptr所指向物件的值,也不能修改該指標的指向。

4 指標與typedef

typedef string *pstring;

const pstring cstr;

cstr的型別是什麼???(極易出錯)

很多人認為 真正的型別是:

const string *cstr;    指向string型別的const物件   這是錯誤的

注意  宣告const pstring 時,const 修飾的是pstring的型別,這是乙個指標。因此該宣告語句應該是把

cstr定義為指向string 型別物件的const指標,等價於

string *const cstr;

理解複雜的const宣告   以後待整理

C primer 讀書筆記

第2 章 變數和基本型別 1 變數直接初始化和變數 複製初始化 int ival 1024 direct initialization int ival 1024 copy initialization 初始化不是賦值 2 內建型別復 制初始化和直接初始化幾乎沒有區別 但 對類型別物件來 說,有些初...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...