C語言指標簡述

2021-09-29 20:01:35 字數 2163 閱讀 2994

\;\;\;\;\,

在c語言中,指標型別一般以資料類

型∗變數

名\color

資料型別∗變

量名的格式出現,如:

int *p;
\;\;\;\;\,

其實這並不有助於理解,而在c++中,指標型別允許如下寫法:

int* p;
\;\;\;\;\,

因此,我個人認為可以借助c++的格式來理解,指標從圖示上理解為指向某某某變數的指標,實際可以把指標當成一種新的變數型別,稱為指標型別,格式即為:變數類

型∗

\color

變數型別

int* 變數名;
\;\;\;\;\;\;

本人作為初學者時遇到的第乙個應用就是利用函式交換兩個數的值:

void

exchangevalue

(int *leftnumber , int *rightnumber)

典型錯誤為:

void

wrongexchange

(int *leftnumber , int *rightnumber)

\;\;\;\;\;\;

上面這個函式對數的交換沒有任何作用,下面來解釋原因:

\;\;\;\;\;\;

首先,我們忽略那套按值傳遞和按引用傳遞那些東西,個人認為c語言中指標引數也是按值傳遞,只不過指標引數傳遞的值是位址,因此第二個函式對位址的交換不會影響原實參儲存的位址,因此進行了一次無效交換。

\;\;\;\;\;\;

對於指標形參能該改變實參指標指

向\color

指向的值的的原因在於∗

\color

∗這個運算子,也是指標作為雙刃劍的根源,能夠不受限制的直接對位址進行操作

\;\;\;\;\;\;

作為補充,大概講述一下按值傳遞,函式在實參轉化為形參的時候,不是真的將實參放到函式裡進行運算,而是在傳參時進行一次拷貝,宣告與函式生命週期相同的區域性變數(形參),然後將實參的值拷貝給形參。

\;\;\;\;\;\;

因此,對於指標變數,也沒什麼區別,只是指標變數拷貝的值,是指標變數中儲存的位址而已。

\;\;\;\;\;\;

作為補充,大概講述一下按值傳遞,函式在實參轉化為形陣列其實是一種特殊的指標,即陣列首位址,是常量指標,即這個指標儲存的值不可修改,這個不可修改並不是指數組的每乙個元素的值不可修改,而是陣列首位址儲存的 乙個連續的記憶體位址的開頭位址不可更改,也就是這個指標指向的位址不可修改。可能大家也有發現另外乙個證明指標與陣列是乙個型別的例子:

int a[10]

=;int *p = a;

// 以下這兩個迴圈輸出的值是相同的

for(int i =

0; i <10;

++i)

printf

("\n");

for(int i =

0; i <10;

++i)

\;\;\;\;\;\;

首先說明,c語言中沒有字串型別,而c語言中經常提及的字串其實是字元陣列的乙個特殊形式,例如:

//這個是字元陣列

char array[3]

=;//這個是字串

char string[4]

=;

\;\;\;\;\;\;

從上面的**可以看出,字串與字元陣列最大的區別就是結尾的字元:』 \0 『,這其實就是乙個標記值,由於更多的標頭檔案中的函式都是針對字串編寫的,因此我們對字元陣列並不是十分常見,對於各種字串函式使用,有很多部落格,不做贅述,也可以參考我的第一篇部落格,為c語言編寫了乙個字串的基礎操作。

\;\;\;\;\;\;

對於字串常量,在賦值的時候編譯器會自動補上』\0』

char array[10]

="goodbye"

;

\;\;\;\;\;\;

上面字元陣列中實際儲存的 goodbye\0,但是,計算字串長度時不要把\0算進去,前提是計算字串長度,其他花裡胡哨的長度不算。

c 指標簡述

1.在程式中定義了乙個變數,在對程式進行編譯時,系統就會給這個變數分配記憶體單元。編譯系統根據程式中定義的變數型別,分配一定長度的空間。一般整形變數分配4個位元組,字元型變數分配1個位元組。記憶體區的每乙個位元組有乙個編號,即 位址 2.由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。...

簡述 C 指標

看乙個一級指標例子 include int main 執行結果 foo.5 foo.0x7ffec682940c 取位址操作 foo p.0x7ffec682940c foo p 存 的值是foo的位址 foo p.0x7ffec6829410 取位址操作 foo p.5 引用操作符 foo p 獲...

函式指標簡述

1 函式指標的實質 a 函式指標的實質還是指標變數,不過指標指向的是函式。b 指標,函式指標,陣列指標都是指標。只不過指向的內容不同。都占用4個位元組。32位系統中都是4個位元組 c 函式指標就是乙個普通的指標變數。變數的型別是乙個函式指標變數型別。它的值是某個函式的位址。d 函式的實質是一段連續分...