16 C語言 指標

2021-09-28 20:57:50 字數 1723 閱讀 7175

學習 c 語言的指標既簡單又有趣。通過指標,可以簡化一些 c 程式設計任務的執行,還有一些任務,如動態記憶體分配,沒有指標是無法執行的。

#include

int main (

)

當上面的**被編譯和執行時,它會產生下列結果:

通過上面的例項,我們了解了什麼是記憶體位址以及如何訪問它。接下來讓我們看看什麼是指標。

指標是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。就像其他變數或常量一樣,您必須在使用指標儲存其他變數位址之前,對其進行宣告。指標變數宣告的一般形式為:

type *var-name;
在這裡,type 是指標的基型別,它必須是乙個有效的 c 資料型別,var-name 是指標變數的名稱。用來宣告指標的星號 * 與乘法中使用的星號是相同的。但是,在這個語句中,星號是用來指定乙個變數是指標。以下是有效的指標宣告:

int

*ip;

/* 乙個整型的指標 */

double

*dp;

/* 乙個 double 型的指標 */

float

*fp;

/* 乙個浮點型的指標 */

char

*ch;

/* 乙個字元型的指標 */

所有實際資料型別,不管是整型、浮點型、字元型,還是其他的資料型別,對應指標的值的型別都是一樣的,都是乙個代表記憶體位址的長的十六進製制數。

不同資料型別的指標之間唯一的不同是,指標所指向的變數或常量的資料型別不同。

使用指標時會頻繁進行以下幾個操作:定義乙個指標變數、把變數位址賦值給指標、訪問指標變數中可用位址的值。這些是通過使用一元運算子 * 來返回位於運算元所指定位址的變數的值。下面的例項涉及到了這些操作:

#include

int main (

)

當上面的**被編譯和執行時,它會產生下列結果:

address of var variable: bffd8b3c

address stored in ip variable: bffd8b3c

value of *ip variable:

20

在變數宣告的時候,如果沒有確切的位址可以賦值,為指標變數賦乙個 null 值是乙個良好的程式設計習慣。賦為 null 值的指標被稱為空指標。

null 指標是乙個定義在標準庫中的值為零的常量。請看下面的程式:

#include

int main (

)

當上面的**被編譯和執行時,它會產生下列結果:

ptr 的位址是 0x0
在大多數的作業系統上,程式不允許訪問位址為 0 的記憶體,因為該記憶體是作業系統保留的。然而,記憶體位址 0 有特別重要的意義,它表明該指標不指向乙個可訪問的記憶體位置。但按照慣例,如果指標包含空值(零值),則假定它不指向任何東西。

如需檢查乙個空指標,您可以使用 if 語句,如下所示:

if

(ptr)

/* 如果 p 非空,則完成 */if(

!ptr)

/* 如果 p 為空,則完成 */

16 C 中的this指標

在之前學習python時,接觸到self形參,它是指向類物件的乙個位址。在c 學習過程中,也有這樣的機制,那就是this指標。我們在呼叫成員函式的時候,實際上是替類的物件呼叫它!成員函式通過乙個名為this的額外的隱式引數來訪問呼叫它的那個物件!當我們呼叫成員函式的時候,用請求的該函式的物件的位址來...

16 C語言和設計模式(外觀模式)

外觀模式是比較簡單的模式。它的目的也是為了簡單。什麼意思呢?舉個例子吧。以前,我們逛街的時候吃要到小吃一條街,購物要到購物一條街,看書 看電影要到文化一條街。那麼有沒有這樣的地方,既可以吃喝玩樂,同時相互又靠得比較近呢。其實,這就是悠閒廣場,遍布全國的萬達廣場就是幹了這麼一件事。首先,我們原來是怎麼...

1 6 C 類和物件

day 6 類和物件 1,類類內部包含類的特徵和類的行為 1,特徵 在類中的表現形式為字段 字段 訪問修飾符 資料型別 欄位名 字段預設修飾符為private 類的預設修飾符為internal,在本程式集可以訪問,他的許可權比public小一點 程式集 exe 可執行檔案 和.dll 2,行為 在類...