if(*a*b) swap(a,b);} 語句前面加*,是對a和b兩個指針變量的值得大小做比較(比較的是變量值,而不是變量地址),如果ab為真,則調(diào)用swap函數(shù),調(diào)用時的把實參a和b(的值)傳給形參x1和y1。
創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為下城企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),下城網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
而在void swap(int*x1,int*x2)中,加了*是表示把x1和x2定義為指針變量,在下面的語句中,起到把X1和X2的值(而不是地址)互換的作用,所以t=*x1; *x1=*x2; *x2=*x1語句中加*.
一般說,加*是表示該變量的值,不加*是表示該變量指向的地址。實參表中是不能加*的。
樓下說的地址傳遞給swap是錯誤的,本例函數(shù)調(diào)用完成的是值的傳遞,而不是地址的傳遞。
不用返回了,你這里函數(shù)里直接對數(shù)組元素進行操作,調(diào)用完之后a就是排好的
#includestdio.h
main()
{
int
a[count];
……;
order(a,count);//在這個地方調(diào)用排序(地方一)
……
}
void
order(int
a[],int
count)
//數(shù)組按從小到大排序
{
int
i,j,x;
for(i=0;icount;i++)
for(j=i+1;jcount;j++)
if(a[i]a[j])
{
x=a[i];
a[i]=wa[j];
a[j]=x;
}
}
for ( int i = 0; i x.Length - 1; i++)
{
int min = i; //假設(shè)當(dāng)前下標為i的數(shù)最小
for (int j = i + 1; j x.Length; j++)/*循環(huán)找出最小的數(shù)的下標是哪個*/
{
if (x[j] x[min])
{
min = j;
}
}
if (min != i) /*如果min在循環(huán)中改變了,就需要交換數(shù)據(jù)*/
{
int t = x[i];
x[i] = x[ min];
x[min] = t;
}
}
}
C程序是從main開始執(zhí)行的,與上下順序沒什么關(guān)系,自定義的子程序只有在使用到的時候才會調(diào)用的,至于num1和num2與XY的關(guān)系嘛,其實就是變量與參數(shù)的關(guān)系,order程序要想運行就需要兩個參數(shù),就是x和y,就是定義函數(shù)時候的那兩個,調(diào)用程序是必須把這兩個參數(shù)的值確定了,就是在main里邊的num1和num2。