這個(gè)無(wú)法交換數(shù)據(jù)。C語(yǔ)言函數(shù)參數(shù)的基本規(guī)則是值傳遞,所以傳遞時(shí)只能實(shí)現(xiàn)實(shí)參向形參的單向的、值的傳遞。這就是為什么需要使用指針才能實(shí)現(xiàn)值交換的原因。
松江網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),松江網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為松江上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的松江做網(wǎng)站的公司定做!
swap函數(shù)一般是一個(gè)程序員自定義函數(shù)。通常是實(shí)現(xiàn)兩個(gè)變量數(shù)值的交換。swap1(x,y);printf(swap1: x:%d,y:%d\n,x,y);//形參傳值,不能交換,實(shí)際傳過(guò)去是拷貝的一份,沒(méi)改變主函數(shù)中x,y。
這是帶參數(shù)的宏定義,相當(dāng)于一個(gè)函數(shù),宏定義實(shí)際上就是把后面的那個(gè)(t= temp;temp=x;x=y;y=temp;)直接加到語(yǔ)句中去的,只是一個(gè)替換,在編譯之前就進(jìn)行的。。
答案:A 分析:按照C++語(yǔ)言規(guī)則,通過(guò)參數(shù)帶回運(yùn)算值,只能是傳地址,不能是傳值 ,B和D的參數(shù)是傳值,故B和D不能選。C中傳回值都是指針變量y所指向地址的值,C也不能選。
要求一個(gè)顛倒x,y的函數(shù),就是說(shuō)把x,y輸入到函數(shù)中,函數(shù)能把他們顛倒。第二個(gè)函數(shù)的參數(shù)中沒(méi)有x和y的指針,所以根本不可能獲得x,y的地址,自然也就不可能顛倒x,y,而且大括號(hào)里的x,y也沒(méi)有變量聲明,只會(huì)報(bào)錯(cuò)而已。
int t,int z)就只是按值傳遞,函數(shù)調(diào)用結(jié)束后下x,y的值沒(méi)有真正的互換,互換的只是只是函數(shù)形參的值,所以這里用指針來(lái)實(shí)現(xiàn),把*x和*y所指向的地址的值互換,這樣在函數(shù)調(diào)用結(jié)束后x,y才真正改變了。
A錯(cuò):y值沒(méi)變;B錯(cuò):傳的不是指針,x和y都不變;C錯(cuò):和A一樣,y不變;D正確:傳的是指針,通過(guò)x和y的地址交換它們的值。
B. funb(int x,int y){int t;t=x;x=y;y=t;/// //x=y是y的值變?yōu)閤的值,后面y=t是x的值變?yōu)閥的值,這里只讓y的值變成x而沒(méi)有把y的值變?yōu)閤的值,沒(méi)有完全交換x和y中的值。
1、A錯(cuò):y值沒(méi)變;B錯(cuò):傳的不是指針,x和y都不變;C錯(cuò):和A一樣,y不變;D正確:傳的是指針,通過(guò)x和y的地址交換它們的值。
2、答案:A 分析:按照C++語(yǔ)言規(guī)則,通過(guò)參數(shù)帶回運(yùn)算值,只能是傳地址,不能是傳值 ,B和D的參數(shù)是傳值,故B和D不能選。C中傳回值都是指針變量y所指向地址的值,C也不能選。
3、函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。 因此在函數(shù)調(diào)用過(guò)程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。