1. 基本概念
指標是儲存變數位址的變數。
指標存在的兩個目的:
1)指標是表達某個計算的唯一途徑;
2)使用指標可以生成更高效、更緊湊的**。
通常情況,機器的乙個位元組可以存放乙個char型別資料,兩個相鄰的位元組儲存單元可儲存乙個short(短整型)型別的資料,而四個相鄰的位元組儲存單元可以儲存乙個long(長整型)型別的資料。
2. 指標與位址
#include
#include
int main (
)
**結果為:
上述案例,我們知道每乙個變數都存放在乙個位址中,如var1的型別是int,假設p是指向var1的指標,則:
p=
&c;
上述**的意思是,把var1的位址賦值給變數p,稱p為指向var1的指標。也就是說,指標p其實是乙個變數,其值為另乙個變數的位址,即,記憶體位置的直接位址。就像其他變數或常量一樣,您必須在使用指標儲存其他變數位址之前,對其進行宣告。官方申明方式為:
int
*p /*乙個整型的指標*/
運算子*稱間接定址或間接引用運算子,是用來指定乙個變數是指標,當它作用於指標時,將訪問指標所指向的物件。
舉個栗子,例1:
#include
#include
int main (
)
**結果為:
舉個栗子,例2:
int x=
1, y=
2, z[10]
;int
*ip;
// ip是指向int型別的指標 //
ip =
&x;// ip指向x,將變數x的位址賦值給變數ip //
y =*ip;
// *ip表示取位址為變數ip值裡的變數,即變數x,並將其賦值給y,因此,y值為1 //
*ip =
0; // 將0賦值給位址為變數ip值裡的變數,即x值賦值為0 //
ip =
&z[0];
// ip指向z[0] //
舉個栗子,例2:
double
*dp,
atof
(char*)
;//*dp和atof(char *)的值都是double型別,且atof的引數是乙個指向char型別的指標//
3. 指標與函式引數c語言是以傳遞的方式將引數值傳遞給被呼叫函式,因此,被呼叫函式不能直接修改主調函式中的變數值。
舉個栗子,例3:
//*****函式一*****//
//描述:交換兩個入口引數的值(錯誤的方法,因為該函式僅僅交換了a和b的副本的值)
//入口引數:int x和int y
//返回值:無
void
swap1
(int x,
int y)
//*****函式二*****//
//描述:交換兩個入口引數的值(正確的方法)
//入口引數:int *px和int *py
//返回值:無
void
swap2
(int
*px,
int*py)
//*px是指向int型別的指標,指向以px值為位址的變數//
//*****主函式*****//
intmain
(void
)
執行結果:
指標與函式的關係
c語言中的指標變數可以指向乙個函式 函式指標可以作為引數傳遞給其它函式 函式的返回值可以是乙個指標值。1 指向函式的指標 函式雖然不是變數,但是它在記憶體中占有實際位置。函式的首位址就是該函式的入口位址,它可以賦給指標變數,使得指標變數指向函式。利用指向函式的指標變數,可以代替函式名,也可以作為函式...
指標與函式引數
該版本的getint函式在到達檔案結尾時返回eof,當下乙個輸入不是數字時返回0,當輸入中包含一 個有意義的數字時返回乙個正值。include int getch void void ungetch int getint函式 將輸入中的下乙個整型數賦值給 pn int getint int pn s...
指標與陣列,指標與函式之間的關係
指標陣列,它的關鍵在於是乙個陣列,即陣列中每個元素都是指標。陣列指標,他的關鍵在於是指標變數,即這個指標指向乙個陣列。include int main 這是乙個陣列,大家都知道。int parr1 4 這是指標陣列,首先的優先順序比 的優先順序高,所以parr 先與結合,它是乙個陣列,然後再與 結合...