3\. 指標與函式
3\. 實踐
4\. 練習
指標是一種儲存變數位址的變數。
在計算機中每個儲存單元(乙個位元組)都有乙個編號,這個編號稱為變數位址。
普通變數的值是實際值,指標變數的值是變數的位址。
完整**見001_address.c指標代表的是位址;
如果輸入的是位址,則相當於&變數,得到對應的值;
變數位址通常使用16進製表示,使用
%p
或者%p
列印位址。試一試,多次執行上面的**編譯的可執行檔案。
定義指標與定義變數的方式一樣,只不過要在型別和變數名中間加上乙個scanf()
實參前面的&
符號*
星號。指標變數只能使用同型別變數的位址賦值。型別* 指標變數;
方式1;定義+初始化;int n =10;
int* p;
p =&n;printf
("&n=%p\n"
,p);
printf
("n=%d\n"
,n);
方式2:可以直接初始化。int n =10;
int* p =
&n;printf
("&n=%p\n"
,p);
printf
("n=%d\n"
,n);
變數必須賦值後才能使用,指標也是必須賦值後才能使用。指標的強大之處可以直接操作儲存位址裡面的資料。這種操作稱為解引用。使用時需要在指標前加上*
星號。注意:這裡的*
與宣告指標的含義不一樣,與乘號也不一樣。完整**見002_jieyinyong.c在這裡對#include
intmain()
*p
操作就是對n
操作;對n
操作就是對*p
操作。訪問變數兩種方式:一是通過變數名直接訪問,而是指標解引用訪問。int n =10;
printf
("*(&n) = %d\n",*
(&n));
//10
值傳遞:位址並未發生改變,所以未發生呼叫;試分析下面**執行結果。
完整**見00301——value_pass.cint
func
(int n)
intmain()
指標傳遞:位址並未發生改變,所以發生呼叫;試分析下面**執行結果。
完整**見00302——address_pass.c
#include
intfunc
(int
* n)
intmain()
函式內部改變函式外部定義的區域性變數必須滿足兩個條件:實現函式指標引數
解引用
swap()
交換兩個變數的值。方案1:值傳遞完整**見00401——value_swap.c
#include
void
swap
(int m,
int n)
intmain()
方案2:指標傳遞完整**見00402——address_swap.c
實現函式#include
void
swap
(int
*m,int
*n)int
main()
divmod()
輸入引數a
和b
,同時獲取a
與b
的商和餘數。多個返回值:採用指標返回;完整**見005——divmod.c
#include
intdivide
(int n ,
int m,
int* mod)
intmain()
指標在函式中有這兩種應用,一種是即作為輸入又作為輸出;另一種只作為輸出。實現函式********()
輸入引數a
、b
和c
,返回能否構成三角形,如果能夠構成三角形從引數獲得周長和面積。實現函式
circle()
輸入引數r
,從引數獲得周長和面積。4 1 指標的基礎
1 指標的本質 指標在本質上也是乙個變數 指標需要占用一定的記憶體位址 指標用於儲存記憶體位址的值 不同型別的指標占用的記憶體空間大小相同 位址匯流排32位機,4個位元組 2 號的意義 在指標宣告時,號表示所宣告的變數為指標 在指標使用時,號表示取指標所指向的記憶體空間的值 號類似一把鑰匙,通過這把...
C 基礎入門 07指標
指標的作用 可以通過指標間接訪問記憶體 指標變數定義語法 資料型別 變數名 示例 int main 指標變數和普通變數的區別 總結3 對指標變數解引用,可以操作指標指向的記憶體 提問 指標也是種資料型別,那麼這種資料型別占用多少記憶體空間?示例 int main 總結 所有指標型別在32位作業系統下...
C 基礎入門 6 指標
指標變數定義語法 資料型別 變數名 int main 輸出 指標p為 00befb04 a 1000 p 1000 int main 空指標 指標變數指向記憶體中編號為0的空間 用途 初始化指標變數 注意 空指標指向的記憶體是不可以訪問的 空指標 int p null 野指標 指標變數指向非法的記憶...