指標與位址 函式引數的關係

2021-10-07 16:36:27 字數 2110 閱讀 8572

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 先與結合,它是乙個陣列,然後再與 結合...