如果想通過函數調用得到n個要改變的值,可以:
1、在主調函數中設n個變量,用n個指針變量指向它們;
2、然後將指針變量作實參,將這n個變量的地址傳給所調用的函數的形參;
3、通過形參指針變量,改變該n個變量的值;
4、主調函數中就可以使用這些改變了值的變量。
程序舉例詳見C程序設計(譚浩強)226-229頁
想要通過函數調用交換兩個數據值得正確程序:
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
上面程序的理解是,通過調換指針所指向的變量值,達到實參中指向地址中的變量值的調換,最終達到變換目的
錯誤程序如下:
void swap(int *p1,int *p2)
{
int *p;
p=p1;
p1=p2;
p2=p;
}
程序的意圖是,通過交換實參指針pointer_1和指針pointer_2的值,使其達到交換的目的
但存在問題,當在調用函數中交換形參指針p1和p2的值後,不能講變化後的形參傳遞給實參,故不能達到實參指針變量交換的目的
C語言中實參變量和形參變量之間的數據傳遞是單向的“值傳遞”方式。指針變量作函數參數也要遵循這一規則。不可能通過調用函數來改變實參指針變量的值,但可以改變實參指針變量所指變量的值。