1. 程式人生 > >函式呼叫引數為指標時,實參跟形參的問題

函式呼叫引數為指標時,實參跟形參的問題

#include<stdio.h> void change(int *p){     int val = 5;     printf("%p\n", p);     *p = val;     printf("%p\n", p);     p = &val;     printf("%p\n", p); } int main(){     int val = 4;     int *p = &val;     change(p);     printf("%d\n", *p);     printf("%p\n", p);     return 0; } 執行結果: 0x7fffdb8192a4 0x7fffdb8192a4 0x7fffdb81928c 5 0x7fffdb8192a4 可以看出,實參跟形參是兩個不同的指標,只不過進入函式時,實參跟形參都指向main函式中的val地址, 當改變形參指向的變數的值時,*p = val; main函式中的val被改變; 但是改變形參的指向地址時,p = &val; 只是改變了形參的指向,並沒有改變實參的指向; 當加上const之後: void change(const int *p){     int val = 5;     printf("%p\n", p);     /**p = val;     printf("%p\n", p);*/  //去掉註釋將發生read-only錯誤     p = &val;     printf("%p\n", p); } 執行結果: 0x7fff85402a94 0x7fff85402a7c 4 0x7fff85402a94 可以看出加上const之後,不能改變形參所指向的變數的值,但是可以改變形參的指向; 其實加上const就是說實參所指向的變數的值是隻讀的,形參不能改變;