如何解決引數的單一傳遞性來改變主函式裡的值

2021-06-28 20:36:02 字數 1114 閱讀 2596

(1)首先我們定義乙個函式swap,它的作用是交換兩個變數a和b的值

void swap(int *p1, int *p2)

{int temp;

temp = *p1;

*p1 = *p2;

*p2 = temp;

swap 函式的兩個形參p1和p2是指標變數

然後再寫主函式

int main()

int a  = 4, b = 6;

int *p3;

int *p4;

p3 = &a;

p4 = &b;

swap(p3, p4);

prinrtf(「a = %d, b = %d」,a, b);

return 0;

分析一下, main程式執行時,a和b的位址分別賦給p3和p4,使p3指向a,p4指向b。 然後進行值傳遞此時的實參p3和p4是指標變數,形參p1和實參p3都指向了變數a,形參p2和實參p4都指向了變數b,都是兩個指標變數指向了同乙個記憶體區域,都可以對記憶體裡的值進行修改,然後執行swap函式,*p1和*p2的值互換,也就是a和b的值進行互換,函式執行完成後,形參被釋放掉了,a的值與b的值也進行了交換。

如果下面著這種形式就不對了,int*temp定義了乙個整形的指標變數,*temp是指標指向的變數,但是temp中並無確定值,所以temp所指向的單元也是不確定的,而*p1就是a,就是整形變數,所以不對。

void swap(int *p1, int *p2)

{int*temp;

temp = *p1;

*p1 = *p2;

*p2 = temp;

再看下面這個函式

void swap(int x, int y)

int temp;

temp = x;

x = y;

y  = temp;

如果在main函式中掉用swap函式,那麼a與b的值就不會被改變了,因為形參和實參的傳遞關係為單向傳遞,只能由實參傳給形參。

了解了實參和形參的關係後,我們就可以很好的利用它們,為了使在函式中改變了的值能被main函式使用,我們不能採取把要改變值的變數作為引數的辦法,而應該採用指標變數作為函式引數,這樣經過函式呼叫後,這些變數值的變化依然可以保留下來 。

如何解決php傳遞頁面引數亂碼問題

php傳遞頁面引數亂碼的解決辦法 1 開啟相應的php 檔案 2 通過 if tag iconv utf 8 c,iconv c,utf 8 tag 方法解決亂碼問題即可。如何解決php傳遞頁面引數亂碼問題?php get傳值 中文引數 亂碼問題的嘗試解決 的中文引數是直接傳的 例如 index.p...

如何解決路由動態傳遞引數。具體例子

對於路由元件傳遞引數 對於上面這種寫法,我們可以在傳遞過去的元件中,直接使用this.route.params.movieid接受引數。通過查閱資料,有一定的缺陷。在元件中使用 route 會使之與其對應路由形成高度耦合,從而使元件只能在某些特定的 url 上使用,限制了其靈活性。故我們可以採取pr...

MQ如何解決訊息的順序性

一 訊息的順序性 1 延遲佇列 設定乙個全域性變數index,根據實際情況一次按照index 的邏輯一次給訊息佇列設定延遲時間段,可以是0.5s,甚至1s 弊端 如果a,b,c.訊息佇列消費時間不一致或者出現網路延遲,就會存在後者比前者先消費完的場景 2 統一消費端 當a消費成功後,通過ack或者c...