c語言入門到c++使用高手: c語言入門之指針(三)

第九章 指針

第三節 變量的指針和指向變量的指針變量-2

1. 指針變量作爲函數參數

  • 函數的參數可以是指針類型,作用是將一個變量的地址傳遞到一個函數中去

  • c語言中,實參變量個形參變量之間數據傳遞是單向的值傳遞,指針變量作爲函數參數也要遵循這個原則

  • 例子1

#include <iostream>

void swap(int *pdest1, int *pdest2) {//兩個指針變量作爲形參
    //pdest1指向p1, pdest2指向p2
    //調用swap函數不能改變實參指針變量的值,p1還是指向a,p2還是指向b,
    //但是可以改變實參指針變量p1,p2指向的變量,也就是a,b的值
    int temp;
    temp = *pdest1;//temp = a;
    *pdest1 = *pdest2;//a = b;
    *pdest2 = temp;// b = a;
    
    //指針調換沒有達到目的,只是修改指向的變量,變量a和變量b並沒有改變
    //退出這個函數後,這三個變量銷燬,也就是說swap函數沒有意義
    // 調用swap沒有改變p1始終指向變量a,p2始終指向b
//    int *ptemp;
//    ptemp = pdest1;//ptemp指向a
//    pdest1 = pdest2;//pdest1指向b
//    pdest2 = ptemp;//pdest2指向a
}

int main() {
    int a = 5, b = 6;
    int *p1, *p2;
    p1 = &a;
    p2 = &b;

    printf("a = %d, b= %d\n", a, b);

    if (a < b) {
        swap(p1, p2);//兩個指針變量作爲實參
    }
    printf("a = %d, b= %d\n", a, b);
    return 0;
}
  • 例子2
#include <iostream>

int main() {
    int *p;//定義整型指針
    //*p代表指針變量p所指向的變量,但p到底指向誰呢,並不確定
    //所以*p可能會造成某個內存被無意修改了,從而使系統崩潰
//    *p = 5;

    // 正確用法,p指向了一段有效的內存,所以可以對它指向的內存進行賦值
    int a;
    p = &a;
    *p = 5;
    printf("a = %d\n", a);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章