為什麼指標變數作為實參在函式中會改變值而普通變數不會呢

2021-04-21 01:33:42 字數 1336 閱讀 6707

1樓:手機使用者

指標變數,是指向地址的變數,它存放的是所指向的地址,普通變數存放的就是 普通資料,~~,

為什麼這個指標不能改變實參的值

2樓:匿名使用者

因為在sp函式中,將b的地址賦給了a,所以main函式中的p就沒改變。

指標(&a、&b)作為函式實參,在子函式中交換a、b的值,在主函式中為什麼能改變a、b的值?

3樓:匿名使用者

因為計算機中,變數存放在記憶體中,記憶體都有一個地址,指標就是指向記憶體內

的地址的,如果把容指標作為實參進行傳遞,也就是把記憶體地址傳了過去,那麼操作這個指標所指向的記憶體塊,必然會改變這個記憶體的內容了。

而如果不是傳指標也不是傳引用的話,而是普通的變數傳遞,則不會改變記憶體內容,以為普通變數作為引數時,其實是在記憶體塊中新申請了一塊空閒塊,不是原來的記憶體塊,而函式呼叫完畢之後,這塊新申請的記憶體塊會由於變數的作用域失效而被系統**。

我打個比方好了,你有兩個生的雞蛋放在櫃子的第二層裡,你現在要把它們煮熟,你跟弟弟說,雞蛋在抽屜的第二層裡,你去把雞蛋拿出來煮熟(這裡相當於傳了指標,抽屜的第二層就是地址)

如果你跟弟弟說,去買兩個雞蛋放到抽屜的第三層,然後煮熟,接著吃掉,那麼,第二層的雞蛋還是第二層的雞蛋,你把第三層的雞蛋給怎麼了也不影響第二層的雞蛋

求採納,麼麼噠

為什麼c語言不能通過執行呼叫函式來改變實參指標變數的值

4樓:小雨田大

呼叫函式,只能改變指標指向的記憶體空間的內容,不能改變實參指標變數的值。專

我覺得題

屬主對指標變數,還算有一點了解。

指標變數,其實也就是一個變數,但它的值是一塊記憶體的地址。

函式呼叫時,你只是把實參指標變數的值,即一塊記憶體的地址,賦(複製)給了形參,然後,你在函式內把形參指標指向別的記憶體空間地址,與實參指標就無關了,實參指標還是指向原來的那塊記憶體空間。

另外,你把實參指標變數的值,賦(複製)給了形參,然後形參指標就能操縱這塊記憶體了,可以改變這塊記憶體的容。此時,實參指標指向的那塊記憶體的內容也就改變了,但實參指標的值還是函式呼叫前的那塊記憶體空間的地址。

5樓:匿名使用者

是可以的啊?你**有問題吧,發來看看

c語言不可能通過執行呼叫函式來改變實參指標變數的值

6樓:匿名使用者

你這個程式編譯沒錯誤?主函式的實參為p,p得到的是a的地址,而返回的普通變數a能賦給p?還能用整數格式直接輸出p?這樣p本是指標變數,後賦值為a,合理嗎?

C語言,函式指標定義中實參表為空的問題

如果函式宣告是void fun int n,char s 那麼指向該函式的指標宣告也必須是void pf int,char void pf 是錯誤的,不能用於指向該函式。函式指標只是個指標,關鍵是呼叫時,引數是否一致。c語言函式宣告中將函式指標引數設定為null的預設值 指定形參預設值是c 的語法,...

C 中,當形參是指標,實參是什麼

你這第一個和第二個有什麼不一樣的麼,就是把temp換成了p。第一個和第二個都不會有變化,第三個會交換。要理解指標和指標變數的含義,我們平時說的指標,一般指的就是指標變數。指標變數也是變數,它的值也會變化。指標變數儲存的是一個記憶體地址。函式呼叫的過程中,先要把實參複製給形參,如果引數是指標型別,那麼...

在子函式中如何使用全域性變數

區域性變數是函式內部定義的變數,其作用域是所在的函式。如果函式外還有一個跟區域性變數名字一樣的變數,程式會認為它們兩個是完全不同的兩個變數。當退出函式的時候,其中的區域性變數就同時被清除。全域性變數是定義在所有函式以外的變數,其作用域是整個php檔案,但是在使用者自定義的函式內部是無法使用的。如果一...