指標的應用舉例

2021-08-20 07:03:44 字數 1076 閱讀 6611

下面是乙個交換a與b之間值的乙個程式:

#include

void swap_error1(int a,int b)

int tmp;

tmp=a;

a=b;

b=tmp;

//printf("%d,%d",a,b);//因為列印函式要盡量使用在主函式中,所以我們在主函式進行列印

int main()

int a=10;

int b=20;

printf("交換前:%d,%d\n",a,b);

swap(a,b);

printf("交換後:%d,%d\n",a,b);

return 0;

這個程式執行後,交換前後的值都是10,20,沒有發生改變,這是因為函式雖然正常執行了,但是列印的都是形參的值,所以不會發生改變,可以通過除錯看出,所以我們就要用指標解決這個問題(下面只交換函式,主函式同上):

void swap_error2(int *p1,int *p2)

int *tmp;

tmp=p1;

p1=p2;

p2=tmp;

這個函式執行後結果也不會發生改變,雖然它利用了指標,但是沒有進行指標的解引用,這段**只是將p1和p2所指的位址進行了交換,並沒有交換所指位址的值。

void swap_error3(int *p1,int *p2)

int *tmp;//未初始化,野指標

*tmp=*p1;

*p1=*p2;

*p2=*tmp;

這次的函式執行後,會給出乙個警告,顯示指標tmp未初始化,程式會崩潰,雖然它用了指標,且進行了指標的解引用,但在這裡,未初始化就使用了的指標tmp稱為野指標,又叫懸掛指標,野指標式沒有訪問許可權的位址(指標),所以程式會崩潰。

那麼,正確的函式應該如下:

void swap_true(int *p1, int *p2)

int tmp;

tmp=*p1;

*p1=*p2;

*p2=tmp;

所以綜上所述,乙個人函式的改變要影響另乙個函式,有兩個條件:

(1)傳指標

(2)解引用

函式指標舉例

include include typedef void funp t char sv funp t funp funp t funp a funp t funp b void fun char sv void fun unknow char sv void case a char sv void ...

棧的應用舉例

一 目的 掌握棧的表示,實現及其針對棧的各種操作進行具體的應用。二 要求 1 建立乙個順序棧,實現括號配對,判斷乙個表示式中括號配對是否合法。2 當使用者輸入乙個合法的表示式後,能夠返回正確的結果。能夠計算的運算子包括 加 減 乘 除 括號 能夠計算的數要求在實數範圍內。對於異常表示式給出錯誤提示。...

vector的應用舉例

1 問題描述 近來寫程式的時候,用到了容器,所以對這個操作進行了一些了解和操作。2 的迭代器的相關函式。表1 vectors的迭代器相關函式 操作 效果c.begin 返回乙個隨機訪問迭代器,指向第乙個元素 c.end 返回乙個隨機訪問迭代器,指向最後元素的下乙個位置 c.rbegin 返回乙個隨機...