C Primer 讀書筆記 Day One

2021-09-27 09:41:10 字數 3283 閱讀 6148

第二章 變數和基本型別

控制流,for語句和while語句,for迴圈的執行順序:

for

(int val =

1;val <=10;

++val)

sum +

= val;

(1)建立變數val,將其初始化為1;

(2)檢測val是否小於等於10,若檢測成功,執行for迴圈體,失敗則退出迴圈,繼續執行for迴圈體後的第一條語句。

用while來讀取數量不定的輸入資料:

while

(cin >> value)

將istream物件作為迴圈條件效果是檢測流的狀態;當遇到檔案結束符(ctrl+z)或者遇到乙個無效的輸入(例如輸入不是個整數),狀態即為無效

對於不屬於標準庫的標頭檔案,使用雙引號( 「 」 )包圍

點運算子只能用於類型別的物件

1byte=8bit

無符號型別僅能表示大於等於0的值

執行浮點數運算選用double,float的精度通常不夠

當我們給無符號型別乙個超過它表示的範圍的值時,結果是初始化值對無符號表示數值總數取模後的餘數,例如:

-1%256=(-1+256)%256=255

整型字面值常量,0開頭表示八進位制數;0x或0x開頭的表示十六進製制數

字串字面值的結尾處自動新增乙個『\0』,因此長度+1

轉義序列都是以反斜槓作為開始 「 \ 」

初始化不是賦值,賦值是將物件的當前值擦除,賦予新值

用花括號來初始化變數稱為列表初始化 list initialization

分離式編譯,將宣告和定義分開,宣告使得名字為程式所知,而定義負責建立與名字相關聯的實體,定義還申請儲存空間,也可能會為變數賦值

extern關鍵字加在變數前,且無顯式的初始化,則該語句為宣告,若顯式地初始化了,則為乙個定義而不是宣告:extern int i為乙個宣告;extern int i =1為乙個定義

變數的定義必須出現在乙個檔案中,其他用到該變數的檔案必須對其進行宣告,不能重複定義

允許在記憶體作用域中重新定義外層作用域已有的名字,若要使用外層作用域的變數,則需要使用作用域操作符(::)來覆蓋預設的作用域規則

一般說的引用都是左值引用,引用必須被初始化

引用即別名,而非物件,引用只能繫結在物件上,而不是乙個字面值或某個表示式的計算結果

指標同樣實現對其他物件的簡介訪問,允許不初始化,但是不初始化會指向不確定的值

由於引用不是物件,沒有實際位址,因此不能定義指向引用的指標

空指標不指向任何物件,得到空指標最直接的方法就是賦予字面值nullptr

void*指標可以存放任意物件的位址

理解復合型別的宣告,離變數名最近的符號對變數的型別有最直接的影響,遵循從右向左的閱讀方法

const限定符建立的物件一旦建立後其值就不能再改變,因此const物件必須初始化

const物件如果要在多個檔案中使用它,需要在變數的定義前加上extern關鍵字

常量引用可以繫結到非常量上,但是非常量引用不能繫結到常量上

不能為非常量引用繫結字面值,而常量引用可以繫結到字面值上

整型引用被繫結到另外一種型別,,編譯器會先產生乙個臨時量物件來進行型別轉換,此時改變引用的值時僅僅改變的是臨時量的值,因此這種行為為非法行為

指向常量的指標pointer to const可用於存放常量物件的位址或者普通變數的位址,普通指標不能指向常量的位址

頂層const描述上述問題就是指標本身是個常量;用底層const表示指標所指的物件是乙個常量

用於宣告引用的都是底層constconst int &r = ci

靠右的const是頂層const,靠左的是底層constconst int *const p3 = p2

轉換規則:當執行物件的拷貝操作時,拷入拷出的物件必須具有相同的底層const資格,或者兩個物件的資料型別必須能夠轉換,以及非常量可以轉換成常量

宣告為constexpr變數一定是乙個常量,而且必須用常量表示式初始化

乙個constexpr指標的初始值必須是nullptr或者0,或者儲存於某個固定位址的物件

限定符constexpr宣告乙個指標的話,限定符則僅僅對指標有效,於指標所指的物件無關constexpr int *q = nullptr//q是乙個指向整數的常量指標

進行型別別名定義時,可以使用typedef a b或者using a = b

auto來進行型別推算時會忽略掉頂層const,同時底層const會保留下來

decltype型別指定符從表示式推斷出要定義的變數的型別,僅僅得到型別,而不計算表示式的值

如果decltype的表示式內容是解引用的操作,那麼decltype將得到引用型別,即必須要初始化繫結物件

decltype的結果型別與表示式的形式密切相關,當給變數加上一層或多層括號,編譯器就會把它當成是乙個表示式,變數是一種可以作為賦值語句左值的特殊表示式,所以這樣的結果型別永遠就是引用decltype((i)) d;//錯誤:d是int&型別,必須初始化

確保標頭檔案多次包含仍能安全工作的常用技術是預處理器標頭檔案保護符

#ifndef sales_data_h

#define sales_data_h

#include

struct sales_data

;#endif

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 下面...