《c和指標》筆記2

2022-02-22 02:43:14 字數 1260 閱讀 2834

列舉型別就是指它的值為符號常量而不是字面值型別.符號名被當作整型常量處理,宣告為列舉型別的變數實際上是整數型別。因此可以將任何整型變數賦值給列舉變數,但是應該避免這種方式使用列舉型別,因為把列舉變數同整數無差別的混合在一起使用,會削弱它們值的含義。

浮點家族包括float、double和long double型別。ansi標準僅僅規定long double至少和double一樣,而double至少了float一樣長,而讀點型別至少能容容納從10-37到1037之間的任何值。浮點數子面值預設情況下為double型別。

指標指示位址的另乙個名字而已,指標變數就是乙個其值為另外乙個(一些)記憶體位址的變數。

c語言內部沒有定義指標常量這個概念。

宣告乙個指標的形式如下:

int *a; 或者 int* a;

但是後者卻不是乙個好的技巧,因為如下語句為造成混淆。

int* a, b, c;

可能我們會認為a、b、c都是指向int型別的指標,但是其實只有a是指向int型別的指標而b、c只是int型別而已。

char *message = "

hello, world!

";

以上是對乙個字串常量進行初始化,message是乙個指向char型別的指標。看上去似乎是賦值給表示式*message,事實上是賦值給message本身的。

屬於external鏈結屬性的識別符號不論宣告多少次、位於不同原始檔都表示同乙個實體。屬於internal的識別符號在同乙個原始檔中的所有宣告都是同乙個實體,而位於不同原始檔中的宣告則是不同的實體。

關鍵字extern和static的作用便是修改識別符號的鏈結屬性。

static只對鏈結屬性為internal的識別符號起作用,令其變為internal鏈結屬性。而extern只對原始檔中乙個識別符號的第一次宣告起作用,使其鏈結屬性變為external。

**塊之外宣告的變數總是儲存於靜態記憶體當中的。而內部宣告的變數預設儲存型別是自動的,儲存於堆疊中,稱為自動變數。

當程式每次執行到宣告自動變數的**時,自動變數才會被建立,程式離開**塊則自動變數自動銷毀。

關鍵字register用於表示將自動變數儲存與機器的硬體暫存器當中。但是如果有過多的變數被宣告為register,編譯器也只會選擇前幾個實際儲存於暫存器中。

在典型情況下,將那些頻繁執行間接訪問操作的指標宣告為暫存器變數可以提高程式的效率。但是將函式的形參宣告為暫存器變數,則對於優化節省的時間和空間開銷遠遠比不上覆制幾個值所用的開銷。

今天就到這裡了,明天繼續,加油。

《C和指標》學習筆記2

在c中,在幾乎所有使用陣列名的表示式中,陣列名的值是乙個指標常量,也就是陣列裡第乙個元素的位址。它的型別取決於陣列元素的型別。只有在兩種情況下,陣列名並不用指標常量來表示,就是當陣列名作為sizeof操作符或者單目操作符 的操作時。sizeof返回整個陣列的長度,而不是指向陣列的指標的長度。取乙個陣...

C 學習筆記 指標2

關於指標形參的注意事項 不要企圖通過改變指標形參的值而使指標實參的值改變,看下面的 include void swap int p1,int p2 int main int a 5,b 9 int pa,pb pa a pb b if a b swap pa,pb std cout a b 要想輸入...

C指標 複習筆記2

1.void 可以定義變數 void p p的型別為void 而void 指標型別,32為平台4位元組 p叫萬能指標 p可以儲存 任意一級指標 char ch p ch 型別 char int num p 型別 int float f p f 型別 flaot p操作,需對p進行強制型別轉換 voi...