C 菜鳥常見錯誤整理 第七天

2021-06-14 18:30:46 字數 2002 閱讀 3073

1、指標

int a(5);   int *pa=&a; 等同於int  a(5);int *p;   p=&a;

*有兩個含義:在定義時,*表示定義的變數為指標變數(可以看作是一種型別),如:int *p;表示p是乙個指標。在執行中*是運算子(訪址運算)*p表示訪問p內容所指向的記憶體單

2、釋放記憶體

動態建立的物件用完後,應該釋放記憶體,delete pi;該命令釋放 pi 指向的 int 型物件所占用的記憶體空間。

如果指標指向不是用 new 分配的記憶體位址,則在該指標上使用delete 是不合法的。

如果指標的值為 0,則在其上做 delete 操作是合法的,但這樣做沒有任何意義: int *ip = 0; delete ip;

3、懸垂指標

刪除指標後,該指標變成懸垂指標。懸垂指標指向曾經存放物件的記憶體,但該物件已經不再存在了。懸垂指標往往導致程式錯誤,而且很難檢測出來。

一旦刪除了指標所指向的物件,立即將指標置為 0,這樣就非常清楚地表明指標不再指向任何物件。

4、刪除 const 物件

儘管程式設計師不能改變 const 物件的值,但可撤銷物件本身。如同其他動態物件一樣, const 動態物件也是使用刪除指標來釋放的:

delete pci; // ok: deletes a const object

即使 delete 表示式的運算元是指向 int 型 const 物件的指標,該語句同樣有效地** pci 所指向的內容。

5、隱式型別轉換

編譯器在必要時將型別轉換規則應用到內建型別和類型別的物件上。在下列情況下,將發生隱式型別轉換:

a   在混合型別的表示式中,其運算元被轉換為相同的型別:

int ival;

double dval;

ival >= dval // ival converted to double

b   用作條件的表示式被轉換為 bool 型別:

int ival;

if (ival) // ival converted to bool

while (cin) // cin converted to bool

c  操作符

條件操作符(?:)中的第乙個運算元以及邏輯非(!)、邏輯與(&&)和邏輯或(||)的運算元都是條件表示式。出現在 if、while、for 和 do while 語句中的同樣也是

條件表示式。

d  可將算術物件轉換為bool型別,bool物件也可以轉換為int型。如bool b=true;  int a=b;//a=1        int a=1;if(a)//a=true

e  用一表示式初始化某個變數,或將一表示式賦值給某個變數,則該表示式被轉換為該變數的型別。

6、指標轉換

在使用陣列時,大多數情況下陣列都會自動轉換為指向第乙個元素的指標:

int ia[10]; // array of 10 ints

int* ip = ia; // convert ia to pointer to first element

我們將在第 7.2.4 節學習如何定義指向陣列的引用(或指標)。c++ 還提供了另外兩種指標轉換:指向任意資料型別的指標都可轉換為 void* 型別;整型數值常量 0 可

轉換為任意指標型別。 

7、命名的強制型別轉換符號的一般形式如下:

cast-name(expression);

其中 cast-name 為 static_cast、dynamic_cast、const_cast 和reinterpret_cast 之一,type 為轉換的目標型別,而 expression 則是被強制轉換的值。

強制轉換的型別指定了在 expression 上執行某種特定型別的轉換。

今天就到這裡,有不足的地方還請指正,謝謝大家!

C 學習第七天

c 中的params引數 引數陣列 1 params引數是陣列。呼叫方式可以陣列方式,也可以單個元素方式。static void test string name,params int scores console.writeline 你好,你的scores is name,sb test 劉德華 ...

C語言第七天

今天學習了結構體這個高大上的東西,在與函式結合的時候,我徹底懵了.做作業的時候我老忘記結構體是一種我自己定義的資料型別 老想著用int之類的型別.這樣就容易懵了,下次我一定要注意這些問題.結構體是一種自定義的資料型別 用struct關鍵字宣告乙個結構體 struct point 定義乙個結構體變數 ...

C 基礎第七天

1 ref引數 ref引數側重於將乙個變數以引數的形式帶到乙個方法中進行改變,改變完成後,再講改變後的值帶出來。在使用ref引數的時候需要注意 ref引數在方法外必須為其賦值。2 方法的過載 方法的過載指的是方法的名稱相同,但是引數不同。引數不同 1 如果引數的個數相同,那麼引數的型別就不能相同。2...