指標的學習和運用
指標的學習和運用
一.什麼是指標
指標就是存放地址的變數當指標指向某個變數,這是這個指標裡就存放了那個變數的地址。
例:
p=&a
當p指向a時,指標p裡就存放了a的地址&a
空指標:NULL
指標變數只比普通變數多一個解引用。
例:
int a=100;//定義一個整形變數a值為100
int *p=&a;//指標變數p指向整形變數a
*p=100; //解引用,將100賦值給p當前所指的變數,即將100賦值給a
除錯過程:
p儲存a的地址
p解引用,*p=a
指標的練習:
int a=10; //定義a的值為10
int b=20;//定義b的值為20
int c=30;//定義c的值為30
int d=40;//定義d的值為40
int *p1=&a;//定義p1指標指向a的地址
int *p2=&b;//定義p2指標指向b的地址
*p1=50; //解引用:a=50 將原來a的值改為50
*p2=60; //解引用:b=60 將原來b的值改為60
p1=&d; //p1指向d的地址
p2=&c; //p2指向c的地址
*p1=70; //d=70
*p2=80; //c=80
p1=&c; //p1指向c的地址
p2=&d; //p2指向d的地址
*p1=100; //c=100
*p2=200; //d=200
整形地址變數儲存整形地址值,其它同理。
父函式(主函式):呼叫函式,如main函式
子函式:被呼叫的函式
//父函式呼叫子函式,子函式的改變要想影響父函式,如下:
1.傳指標 : 直接將實參的地址進行傳送
2.解引用:通過對指標的解引用去修改其中的值
指標間的交換:
int tmp; //在定義空指標時絕對不能寫成int *tmp,否則就為野指標。
tmp=*p1; //以下三行實現的是指標間的交換
*p1=*p2;
*p2=*tmp;
思考題:
此時程式為什麼出錯?
錯在哪裡?