C語言重點—指針化難為易

相信對于學習過C語言的人來說指針一直是一個難點。其實C語言也就只有這么一個難點,攻破了這個難點,要做的就是不斷實踐了,畢竟想好學好一門語言不實踐是不行的。

每一個變量都有一個內(nèi)存位置,每一個內(nèi)存位置都定義了可使用連字號(&)運算符訪問的地址,它表示了在內(nèi)存中的一個地址,我們先了解什么是內(nèi)存地址以及如何訪問它??聪旅娴膶嵗?,它將輸出定義的變量地址:

當上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結果:

接下來讓我們看看什么是指針吧!

指針是一個變量,其值為另一個變量的地址,即內(nèi)存位置的直接地址。就像其他變量或常量一樣,您必須在使用指針存儲其他變量地址之前,對其進行聲明。指針變量聲明的一般形式為:

type *name;

這里的type 是指針的基類型,它必須是一個有效的 C 數(shù)據(jù)類型,name 是指針變量的名稱。用來聲明指針的星號 * 與乘法中使用的星號是相同的。但是,在這個語句中,星號是用來指定一個變量是指針。以下是有效的指針聲明:

所有指針的值的實際數(shù)據(jù)類型,不管是整型、浮點型、字符型,還是其他的數(shù)據(jù)類型,都是一樣的,都是一個代表內(nèi)存地址的長的十六進制數(shù)。不同數(shù)據(jù)類型的指針之間唯一的不同是,指針所指向的變量或常量的數(shù)據(jù)類型不同。

在此列出一些平??赡苡玫降闹羔樌?/p>

小編推薦一個學C語言/C++的學習裙【?六四二,一二零,九一四 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具,很多干貨和技術資料分享!

接下來我們看下什么是函數(shù)指針

一個函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū)域,函數(shù)名在表達式中有時也會被轉換為該函數(shù)所在內(nèi)存區(qū)域的首地址,這和數(shù)組名非常類似。我們可以把函數(shù)的這個首地址(或稱入口地址)賦予一個指針變量,使指針變量指向函數(shù)所在的內(nèi)存區(qū)域,然后通過指針變量就可以找到并調(diào)用該函數(shù)。這種指針就是函數(shù)指針。

函數(shù)指針的定義形式為:

returnType (*pointerName)(param list);

returnType 為函數(shù)返回值類型,pointerNmae 為指針名稱,param list 為函數(shù)參數(shù)列表。

注意:

( )的優(yōu)先級高于*,第一個括號不能省略,如果寫作returnType *pointerName(paramlist);

就成了函數(shù)原型,它表明函數(shù)的返回值類型為returnType *。

下面寫一個簡單的栗子:

編譯并運行結果如下:

上面對msg函數(shù)進行了調(diào)用,fun_p是一個函數(shù)指針。

總結:

指針(Pointer)就是內(nèi)存的地址,C語言允許用一個變量來存放指針,這種變量稱為指針變量。指針變量可以存放基本類型數(shù)據(jù)的地址,也可以存放數(shù)組、函數(shù)以及其他指針變量的地址。

常見的指針含義:

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容