C 中一些容易混淆的概念

2021-09-01 00:22:53 字數 3078 閱讀 1910

指標函式:是指帶指標的函式,本身是函式,只是返回值是某乙個型別的指標。

int

*fun

(int x)

;

函式指標:指向函式的指標變數,即本質是乙個指標變數。

int

(*fun)

(int x)

;

void

(*fun)()

;//定義函式指標

void

test()

;int

main()

void

test()

typedef

typedef:為c語言的關鍵字,作用是給變數乙個易記且意義明確的新名字,另乙個是簡化一些比較複雜的型別宣告。

作用域:

如果放在所有函式之外,它的作用域就是從它定義開始直到檔案尾;

如果放在某個函式內,定義域就是從定義開始直到該函式結尾;

對指標的操作:

typedef

int* int;

int a,b;

a跟b都是 int* 型別

typedef使用:

int*(

*a[5])

(int

,char);

//pfun是我們建的乙個型別別名

typedef

int*

(*pfun)

(int

,char);

//使用定義的新型別來宣告物件,等價於int* (*a[5])(int, char);

pfun a[5]

;

解讀:int *(*fun)(int, char);

fun 首先找到變數名

(*fun) 這是指標

(*fun)(int, char) 函式指標

int *(*fun)(int, char) 返回型別為int * 型的函式指標

typedef

char

*pstr;

char string[4]

="abc"

;const

char

*p1=string;

const pstr p2=string;

p1++

;//正確

p2++

;//錯誤

const pstr p2 相當與 char * const p2。

define

#define:是c語言中定義的語法,是預處理指令。不只是可以為型別取別名,還可以定義常量、變數、編譯開關等。

#define pi 3.1415926

程式中的:area=pirr 會替換為3.1415926rr

如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。

(1)巨集名一般用大寫

(2)使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義

(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。

(4)巨集定義末尾不加分號;

(5)巨集定義寫在函式的花括號外邊,作用域為其後的程式,通常在檔案的最開頭。

(6)可以用#undef命令終止巨集定義的作用域

(7)巨集定義可以巢狀

(8)字串" "中永遠不包含巨集

(9)巨集定義不分配記憶體,變數定義分配記憶體。

作用域:

不管是在某個函式內,還是在所有函式之外,作用域都是從定義開始直到整個檔案結尾。

對指標的操作:

#define int int* 

int a,b;

a是 int* 型別,b是int型別

指標常量

int

*const p //指標常量

例:

int a,b;

int*

const p=

&a;//指標常量

*p=9

;//操作成功,可以改變指標指向變數的內容

p=&b;

//操作錯誤,不能改變指標的指向

常量指標

const

int*p //常量指標

例:

int a,b;

const

int*p=

&a;//常量指標

*p=9

;//操作錯誤,不能改變指標指向變數的內容

p=&b;

//操作成功,可以改變指標的指向

const 跟 int* 關係可以理解為:左定值,右定向

指標常量,指標不能變。

常量指標,變數不能變

物件賦值

物件的賦值是對乙個已經存在的物件賦值,因此必須先定義被賦值的物件,才能進行賦值

box box1;

box box2;

box2 = box1

物件複製

物件複製則是從無到有地建立乙個新物件,並使它與乙個已有的物件完全相同(包括物件的結構和成員的值)

box box1;

box box2 = box1;

函式過載:

必須在同乙個類中進行;

子類無法過載父類的函式,父類同名函式將被子類名稱覆蓋;

過載是在編譯期間根據引數型別和個數決定函式的呼叫(靜態聯編)。

函式重寫與重定義:

重寫:必須發生在基類和派生類之間,並且父類與子類的函式必須有完全相同的函式原型;

使用virtual關鍵字宣告之後能夠產生多型(如果不使用virtual,那叫重定義);

多型是在執行期間根據具體物件的型別決定函式呼叫(動態聯編)。

C 中一些易混淆概念總結(五)

這次主要分享的內容是關於繼承的知識。首先,我們先來看看繼承 既然有繼承,就要有父類和子類,來看下面的一段 複製 class person public void run class student person 複製 然後我在main 函式中例項化子類的物件,如下 static void main ...

c 容易混淆的概念

簡單地說,c 標準庫包含了三個部分 c 標準庫的 c 版本 c io 庫 c stl io 庫最常用的 header 是 標頭檔案 stl 包括了很多容器類 vector,list,deque,stack.還有 functinal,algorithm,iterator 等 c 標準庫的 c 版本 設...

c語言指標容易混淆的一些應用

陣列名稱等價於指標 int iarry int p p iarry 陣列名iarry等價於乙個指向該陣列的指標 方括號陣列下標運算符號 相當於取址 怎麼理解呢,iarry 1 等價於 iarry 1 或 p 1 陣列名iarry是指向該陣列第乙個元素的首位址 iarry指向的位址 iarry 0 但...