C語言基礎07 位址和指標

2021-10-05 12:05:24 字數 2220 閱讀 8400

7.1位址和指標的概念

程式中只需指出變數名,無需知道每個變數在記憶體中的位址,每個變數與具體位址之間的聯絡由c編譯系統來完成。

記憶體單元內容:

printf("%d",i):根據變數名與位址的對應關係,關係在編譯時就已經確定,找到變數i的位址,然後由位址開始的4個位元組中取出資料,即變數的值,把它輸出。

將變數i的位址存放在另外乙個變數中,然後通過該變數來找到變數i的位址,從而訪問變數i,稱為間接訪問方式。

乙個變數的位址就是該變數的指標。

7.2指標變數

7.2.1 指標變數的定義

指標變數也是乙個變數,必須先定義後使用。

定義指向變數的指標變數的格式:型別識別符號 *變數名;

例如:int i,j,*p

定義整形變數i,j,還定義了指標變數p,指標變數名前的"*"號僅是乙個符號,並不是指標運算子,表示定義的p的指標變數;

型別識別符號:表示該指標變數所指向的變數的資料型別,並不是指標變數自身的資料型別,所有指標變數都是存放變數位址的。

所有指標的型別相同,只是所指向的變數的資料型別不同。

為了找到變數的位址,可以使用&(取位址)運算子。如果i是變數,那麼&i就是i在記憶體中的位址。獲得指標所指物件的訪問,可以使用*(間接定址)運算子。

如果p是指標,那麼*p就是p當前指向物件的內容。

例:int i=3;*p;

p=&i;

程式的第一句int i=3;*p; 定義了乙個整型變數i和乙個整型的指標變數p;i的初值為3,當執行p=&i之後,p指向i。此時&i就是i在記憶體中的位址,*p就是p當前所指向變數i的儲存空間裡面的內容。

7.2.2 指標變數的引用

在定義了指標變數之後,就可以對該指標變數進行各種操作。

例:7-1;

#include "stdio.h"

main()

7.2.3 指標變數作為函式的引數

位址呼叫的方法,在函式呼叫的時候,不能向形參傳遞變數的內容,而傳遞變數的位址,只有得到變數的位址,才能利用間接定址方式在函式中去改變相應的位址單元中的資料值。利用指標變數作為函式的引數。

① 函式呼叫時,系統臨時建立形參指標變數

② 實參將其位址複製乙份給形參,於是形參指標變數與實參變數間建立了「指向」關係,即形參指令變數指向了實參所對應的儲存空間

③ 函式呼叫過程中,利用形參指標變數間接地引用或修改實參對應儲存空間中地數值

④ 當被調函式執行結束返回主調函式時,形參指標變數自動釋放。注意:此時釋放的是形參所占地臨時儲存空間,而不是釋放實參所對應的儲存空間。

適用場合:

① 如果主調函式中有數值需要利用被調函式為其修改,則採用位址傳遞方式,將需要修改數值的變數位址作函式實參

② 位址傳遞方式還經常用於被調函式執行結束後,向主調函式帶回多個執行結果的場合。由於函式的返回值每次僅能向主調函式帶回乙個數值,當有多個數值需要帶回主調函式時,應採用位址傳遞方式

函式的呼叫不能改變實參指標變數的指向,但可以改變實參指標變數所指向的儲存空間中的值。

例子:輸入3個數,輸出其中的最大整數和最小整數。

#include "stdio.h"

main()

void max(int *da,int *db,int *dc)

if(*db>*da&&*db>*dc)

if(*dc>*da&&*dc>*db)

printf("最大值為:%d\n",t);

}void min(int *xa,int *xb,int *xc)

if(*xb

if(*xc

printf("最小值為:%d\n",t);

}

7.3指向指標的指標指標不但可以指向基本型別的變數,還可以指向指標變數,這種指向指標型別資料的指標變數稱為指向指標的指標,或稱多級指標。

二級指標定義形式:

型別識別符號 **變數名

例子:int a,*p,**p;

a=22;

p=&a;

pp=&p;

二級指標與一級指標是兩種不同的資料型別,儘管它們都是位址,但不可以相互賦值。

菜鳥C 學習筆記 16 位址和指標

includeusing namespace std int main 注意 不同的編譯器輸出的結果是不一樣的。2 指標 用於直接對記憶體進行操作 定義方法 在指標變數前加星號 例如 includeusing namespace std int main int i 1 int p 注意這個指標變數...

第10章 指標 四 位址簿 指標變數

在本章前幾節中,我們已經了解了什麼是位址,什麼是首位址 指標 進而知道了什麼是首位址型別 指標型別 下面,我們就把變數或函式的首位址 存入到計算機 的位址簿中 在計算機 程式中,無論是記錄變數 的首位址,還是函式 的首位址,都需要建立計算機所特有的位址簿。好,讓我們來開始建立吧。一 指標變數 前面的...

IPV6位址壓縮 C

題目要求 給定一組ipv6位址 unsigned 0x 以文字形式輸出壓縮後的位址 一般要求 注 若有超過兩個地方有連續0,選擇較長的那個進行壓縮 輸入 1234 0abc 0000 0078 ff00 0000 0030 0005 2001 0db8 0000 0000 0001 0000 000...