在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/C/ 用指針作為變量什么時(shí)候可以改變實(shí)參

用指針作為變量什么時(shí)候可以改變實(shí)參

#include<stdio.h>
void fun1(int *a,int *b);
void fun2(int *a,int *b);
void fun3(int *a,int *b);
int main()
{

    int i=10,j=20,*x=&i,*y=&j;
    //fun1(x,y);printf("%d %d",*x,*y); 輸出10 20 
    //fun2(x,y); printf("%d %d",*x,*y);輸出10 10
    fun3(x,y);     printf("%d %d",*x,*y); //輸出20 10 


   return 0;
}
void fun1(int *a,int *b)
{
    int *temp;
    temp=a;
    a=b;
    b=temp;

}
void fun2(int *a,int *b)
{
    int *temp;
    *temp=*a;
    *a=*b;
    *b=*temp;

}
void fun3(int *a,int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;

}

/*
(1) 對(duì)與第一個(gè)fun1()函數(shù)

       為什么他們的值沒(méi)有發(fā)生改變呢? 我的理解是,fun()函數(shù)中
       是a,b的地址調(diào)換了 應(yīng)該是改變了值才對(duì) 應(yīng)該是20 10,但是
       他們沒(méi)有改變。

(2)對(duì)與第二個(gè)fun2()函數(shù)

   *temp,*a,*b他們是指針變量所指向的值發(fā)生變化,應(yīng)該不會(huì)影響實(shí)參i,j吧
   但是和我想的不一樣。

(3)對(duì)與第三個(gè)fun3()函數(shù)

   為什么就改變了呢?

*/
回答
編輯回答
選擇

嚴(yán)格的說(shuō)法,在c中你無(wú)法改變實(shí)參,因?yàn)?code>c中傳遞參數(shù)是通過(guò)復(fù)制來(lái)傳遞的,由main函數(shù)到被調(diào)函數(shù)的過(guò)程中實(shí)參和行參已經(jīng)完全沒(méi)有了關(guān)系,除了值相同之外

之前就回答過(guò)你了,fun1中的行參a 以及 bmain 中的 x 以及 y 除了指向相同的地址之外
沒(méi)有任何的關(guān)系,你對(duì)調(diào)了a b不會(huì)對(duì)xy產(chǎn)生任何影響,也不會(huì)對(duì) ij 產(chǎn)生影響

而你所理解的能改變實(shí)參,指的是通過(guò)指針可以改變指向變量的值(畢竟指針就是干這個(gè)的?。?,無(wú)論指針(被調(diào)函數(shù)(fun1 fun2 fun3)中的 a b 以及 main中的x y )在哪里,只要指向的地方相同都能訪問(wèn)到那個(gè)指向的變量(i 以及 j),即通過(guò) *a 或者 *x 就能改變 i的值!

fun2 是錯(cuò)誤的寫法

2017年8月22日 09:03
編輯回答
有點(diǎn)壞

指針本質(zhì)上是一個(gè)代表地址的整數(shù),用于尋址,強(qiáng)制類型轉(zhuǎn)換確實(shí)可以賦值給整型。
但是并不是所謂的地址調(diào)換,所以是你對(duì)指針的理解錯(cuò)誤了。
你這樣在整型和指針之間亂轉(zhuǎn)類型,尤其直接把拿 int 的值去尋址,八成都改了不知道哪里的內(nèi)存了。

吐槽下你的編譯器:
1.一個(gè) (int 型的 a) 居然可以被賦值給一個(gè) (指針 temp) 而不用顯示強(qiáng)制類型轉(zhuǎn)換。
2.居然可以把一個(gè)(int 型的 a)直接 *a 就當(dāng)作指針用。

2018年1月11日 04:49