《征服C指標》 讀書筆記(1)

2021-07-03 06:08:29 字數 1706 閱讀 2354

一、指標的基本知識

示例**:

#include int main(void)

輸出結果:

&hoge..0xbfbfd9e4

&piyo..0xbfbfd9e0

&hoge_p..0xbfbfd9dc

hoge_p..0xbfbfd9e4

*hoge_p..5

hoge..10

要 點:

1. 對變數使用&運算子, 可以取得該變數的位址。這個位址稱為指向該變數的指標。

2. 指標變數 hoge_p 儲存了指向其他變數的位址的情況下, 可以說「hoge_p 指向 hoge」。

3. 對指標變數運用*運算子, 就等同於它指向的變數。如果 hoge_p 指向 hoge, *hoge_p 就等同於 hoge。

一些要注意的點:

1. c語言混亂的宣告 

int* hoge_p, piyo_p; 確實符合「型別 變數名;」的格式,但是有問題:

int* hoge_p, piyo_p; 等價於 int *hoge_p; int piyo_p;

2. 關於int main(void)

不推薦 void main(void) 的寫法,有返回值的main函式更優,返回0表示通知執行環境程式「正常結束」

二、指標和位址之間微妙的關係

指標就是位址?

/* ansi c 為我們準備了「可以指向任何型別的指標型別」—— void*型別 */

int hoge = 5;

void *hoge_p;

hoge_p = &hoge;   /* 這裡不報錯 */

printf("%d\n", *hoge_p); /* 列印輸出hoge_p 指向的變數的值 */

/* 第7行會報錯,如果僅僅告之記憶體位址,

卻沒有告之在那個位址上儲存的資料型別,當然是不能取出值來的 */

printf("%d\n", *(int*)hoge_p); /* 將hoge_p強制轉換成int* */

/* 這裡通過將「所指型別不明的指標」hoge_p強制轉型成「指向int的指標」

來告之編譯器型別資訊,由此可以取出int型別的值。

但每次都這樣寫是比較繁瑣的,不妨事先寫成以下的宣告:

int *hoge_p; */

三、指標運算

示例**:

int main(void)

輸出結果:

hoge_p..0xbfbfd9e4    //  最初的值

hoge_p..0xbfbfd9e8 // 加1 後的值

hoge_p..0xbfbfd9f4 // 加1 之後再加3 的值

指標運算的特徵:

對指標進行加1運算,位址的值會增加當前指標所指向資料型別的長度

該例程中hoge_p是指向int的指標,而在作者的環境中int型別的長度為4,所以給位址加1,指標前進4個位元組

要點:對指標加 n,指標前進「當前指標指向的資料型別的長度×n」

C 讀書筆記 1

1 include 1 以 標誌開始的語句是預處理器的指示語句,不是可執行的語句,只是起到提醒編輯器下面要即將進行編譯 2 iostream是輸入 輸出流標準標頭檔案,相當於c語言中的stdio.h 2 using namespace std 1 此行代表的是標準命名庫空間,在此處宣告,便可以在下面...

C和C指標讀書筆記

1.c中變數的儲存型別 儲存型別分為靜態儲存 普通記憶體 堆疊,暫存器自動變數即 塊內部的變數儲存於堆疊,其他變數儲存於普通記憶體即靜態儲存,如果頻繁訪問乙個變數,宣告為暫存器型別後儲存於硬體暫存器中。2.c中實體的鏈結屬性 1 屬於internal鏈結屬性的識別符號在同乙個原始檔內的所有宣告中都指...

c 學習讀書筆記《1》

1.設定環境變數 path c windows microsoft.net framework v2.0.50727 2.helloworld.cs 第乙個程式 cmd csc helloworld.cs helloworld.exe namespace 可以巢狀 被引用時用 using a 但是當...