C和指標閱讀(第三章)

2021-10-24 21:07:17 字數 1745 閱讀 7136

如果下標值是從那些已知是正確的值計算得來,那麼就無需檢查它的值。如果用作下標的值是根據某個方法從使用者輸入的資料產生而來的,那麼在使用它之前必須進行檢測,確保它們位於有效的範圍之內。

在宣告指標變數時,可以為它指定初始值。(個人感覺初始化賦值null即可)。

char

*message =

"hello world!"

;

注意:這種型別的宣告所面臨的乙個危險是你容易誤解它的意思。在前面乙個宣告中,看上去初始值似乎賦給表示式*message,事實上它是賦給message本身的,前面乙個宣告相當於:

char

*message;

message =

"hello world!"

;

依賴隱式宣告是很傻的事情,我們要用顯式清楚表達自己的意圖。

typedef允許你為各種資料型別定義新名字。typedef宣告的寫法和普通的宣告基本相同,只是把typedef這個關鍵字出現在宣告的前面

// 把變數ptr_to_char宣告為乙個指向字元的指標。

char

*ptr_to_char;

// 把識別符號ptr_to_char作為指向字元的指標型別的新名字。

typedef

char

*ptr_to_char;

int

*pi;

pi是乙個普通的指向整型的指標。

int

const

*pci;

// 類似於 int const (*pci);

pci是乙個指向整型常量的指標。可以修改指標的值,但不能修改它所指向的值。

int

*const cpi;

cpi是乙個指向整型的常量指標。此時指標是常量,它的值無法修改,但是可以修改它所指向的整型的值。

int

const

*const cpci;

cpci無論是指標本身還是它所指向的值都是常量,不允許修改。

用於函式定義時,或用於**塊之外的變數宣告時,static關鍵字用於修改識別符號的鏈結屬性,從external改為internal,但識別符號的儲存型別和作用域不受影響。用這種方式宣告的函式或變數只能在宣告它們的原始檔中訪問。

用於**塊內部的變數宣告時,static關鍵字用於修改變數的儲存型別,從自動變數修改為靜態變數,但變數的鏈結屬性和作用域不受影響。用這種方式宣告的變數在程式執行之前建立,並在程式的整個執行期間一直存在,而不是每次在**塊開始執行時建立,在**塊執行完畢後銷毀。

變數型別宣告的位置是否位於堆疊作用域如果宣告為static

全域性所有**塊之外

否從宣告處到檔案尾

不允許從其他原始檔訪問

區域性**塊起始處

是整個**塊

變數不儲存於堆疊中,它的值在程式整個執行期一直保持

形式引數

函式頭部

是整個函式

不允許

C和指標 第三章

一 看了半天,覺得最有價值的地方莫過於是資料的儲存和字元型別和指標之間的混沌關係 資料儲存 1.1棧區 編譯器在需要的時候分配,不需要的時候 一般變數的生命週期到外面的 為止 它的記憶體空間相對於堆來說,要小很多 比如申請int a 10000000000000 編譯器就會報錯 但是好在執行效率高,...

《C和指標》第三章 資料

1.c語言中有四種基本資料型別 整形 浮點型 指標和聚合型別 陣列 結構等 2.整型家族包括字元型 至少8位 短整型 至少16位 整型 至少16位 和長整型 至少32位 她們都有有符號和無符號兩種版本。3.列舉型別就是指她的值為符號常量而不是字面值型別,而符號名實際值都是整型值。如果某個符號沒有顯示...

C Primer閱讀心得(第三章)

1.在標頭檔案 h或者 hpp 中不要使用using語句。因為如果標頭檔案中使用了using語句後,每個include它的原始檔中都預設包含了這個using,那麼可能會與這個原始檔中的變數名或者其他的標頭檔案中的變數名產生衝突。2.string物件的讀入 過載的 以空格為結束符,而getline以換...