1、值傳遞,創(chuàng)建變量x和y,x的值等于a的值,y的值等于b的值
成都創(chuàng)新互聯(lián)公司專注于白朗網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供白朗營銷型網(wǎng)站建設(shè),白朗網(wǎng)站制作、白朗網(wǎng)頁設(shè)計、白朗網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造白朗網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供白朗網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
void Exchg1(int x, int y)?
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf(“x=%d,y=%d/n”,x,y)
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
printf(“a=%d,b=%d/n”,a,b)
}
2、地址傳遞,相當(dāng)于建立了px和py兩個指向整型的指針,其值分別為a和b的地址
Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
print(“*px=%d,*py=%d/n”,*px,*py);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
3、引用傳遞,x和y直接引用a和b,對a和b操作,相當(dāng)于給a、b起了別名x、y
Exchg2(int x, int y)
{
int tmp=x;
x=y;
y=tmp;
print(“x=%d,y=%d/n”,x,y);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(“a=%d,b=%d/n”, a, b);
}
擴(kuò)展資料:
printf用法:
printf()函數(shù)的調(diào)用格式為:printf("lt;格式化字符串gt;",lt;參量表gt;)。
其中格式化字符串包括兩部分內(nèi)容:一部分是正常字符,這些字符將按原樣輸出;另一部分是格式化規(guī)定字符,以"%"開始,后跟一個或幾個規(guī)定字符,用來確定輸出內(nèi)容格式。
參量表是需要輸出的一系列參數(shù),其個數(shù)必須與格式化字符串所說明的輸出參數(shù)個數(shù)一樣多,各參數(shù)之間用","分開,且順序一一對應(yīng),否則將會出現(xiàn)意想不到的錯誤。
比如:
int a=1234;
printf("a=%d\n",a);
輸出結(jié)果為a=1234。
系統(tǒng)調(diào)用,一般有兩種,一種是API ,即application program interface即應(yīng)用程序接口,我們所說的庫函數(shù) 實際上就是一種API函數(shù),所以,這種情況下,它們是一種東西,所以可以共存,另外一種系統(tǒng)調(diào)用,是內(nèi)核級的,在linux上可以直接通過內(nèi)核調(diào)用指令,或者在C語言代碼中通過 asm關(guān)鍵字內(nèi)聯(lián)調(diào)用。。這時候,這還是系統(tǒng)調(diào)用。。只不過是更低層的操作系統(tǒng)調(diào)用。。
Linux內(nèi)核中設(shè)置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序,稱為系統(tǒng)調(diào)用。
用戶可以通過系統(tǒng)調(diào)用命令在自己的應(yīng)用程序中調(diào)用它們。
從某種角度來看,系統(tǒng)調(diào)用和普通的函數(shù)調(diào)用非常相似。
區(qū)別僅僅在于,系統(tǒng)調(diào)用由操作系統(tǒng)核心提供,運行于核心態(tài);而普通的函數(shù)調(diào)用由函數(shù)庫或用戶自己提供,運行于用戶態(tài)。
隨Linux核心還提供了一些C語言函數(shù)庫,這些庫對系統(tǒng)調(diào)用進(jìn)行了一些包裝和擴(kuò)展,因為這些庫函數(shù)與系統(tǒng)調(diào)用的關(guān)系非常緊密,所以習(xí)慣上把這些函數(shù)也稱為系統(tǒng)調(diào)用。
擴(kuò)展資料:
實際上,很多已經(jīng)被我們習(xí)以為常的C語言標(biāo)準(zhǔn)函數(shù),在Linux平臺上的實現(xiàn)都是靠系統(tǒng)調(diào)用完成的,所以如果想對系統(tǒng)底層的原理作深入的了解,掌握各種系統(tǒng)調(diào)用是初步的要求。
進(jìn)一步,若想成為一名Linux下編程高手,也就是我們常說的Hacker,其標(biāo)志之一也是能對各種系統(tǒng)調(diào)用有透徹的了解。
即使除去上面的原因,在平常的編程中你也會發(fā)現(xiàn),在很多情況下,系統(tǒng)調(diào)用是實現(xiàn)你的想法的簡潔有效的途徑,所以有可能的話應(yīng)該盡量多掌握一些系統(tǒng)調(diào)用,這會對你的程序設(shè)計過程帶來意想不到的幫助。
調(diào)用性能問題
系統(tǒng)調(diào)用需要從用戶空間陷入內(nèi)核空間,處理完后,又需要返回用戶空間。其中除了系統(tǒng)調(diào)用服務(wù)例程的實際耗時外,陷入/返回過程和系統(tǒng)調(diào)用處理程序(查系統(tǒng)調(diào)用表、存儲\恢復(fù)用戶現(xiàn)場)也需要花銷一些時間,這些時間加起來就是一個系統(tǒng)調(diào)用的響應(yīng)速度。
系統(tǒng)調(diào)用不比別的用戶程序,它對性能要求很苛刻,因為它需要陷入內(nèi)核執(zhí)行,所以和其他內(nèi)核程序一樣要求代碼簡潔、執(zhí)行迅速。
幸好Linux具有令人難以置信的上下文切換速度,使得其進(jìn)出內(nèi)核都被優(yōu)化得簡潔高效;同時所有Linux系統(tǒng)調(diào)用處理程序和每個系統(tǒng)調(diào)用本身也都非常簡潔。
絕大多數(shù)情況下,Linux系統(tǒng)調(diào)用性能是可以接受的,但是對于一些對性能要求非常高的應(yīng)用來說,它們雖然希望利用系統(tǒng)調(diào)用的服務(wù),但卻希望加快相應(yīng)速度,避免陷入/返回和系統(tǒng)調(diào)用處理程序帶來的花銷。
因此采用由內(nèi)核直接調(diào)用系統(tǒng)調(diào)用服務(wù)例程,最好的例子就HTTPD——它為了避免上述開銷,從內(nèi)核調(diào)用socket等系統(tǒng)調(diào)用服務(wù)例程。
參考資料:系統(tǒng)調(diào)用_百度百科
如果在設(shè)計c語言程序中,反復(fù)要用到一個組合計算的程序段,比如:
void main()
{
int a,b,c,x,y,z,j,k,l;
...
c=a+b; c-=(a-b)/2; //計算c=(a+b)-(a-b)/2
...
z=x+y; z-=(x-y)/2; //計算z=(x+y)-(x-y)/2
...
l=j+k; l-=(j-k)/2; //計算l=(j+k)-(j-k)/2
...
}
由于它們的計算公式相同,就采用一個函數(shù)來替代相似的語句:
int fun(int a,int b) { int c; c=a+b; c-=(a-b)/2; return c; } //按照公式計算并返回結(jié)果
這樣程序就變成了:
int fun(int a,int b) { int c; c=a+b; c-=(a-b)/2; return c; }
void main()
{
int a,b,c,x,y,z,j,k,l;
...
c=fun(a,b);
...
z=fun(x,y);
...
l=fun(j,k);
...
}
*這樣的效果是:重復(fù)利用了函數(shù)的代碼,節(jié)省程序的代碼量(尤其是計算公式很復(fù)雜的情況更突出),程序簡潔易讀,便于統(tǒng)一修改計算公式和方法。
*還有一個優(yōu)點就是:你調(diào)用函數(shù)時,無須知道算法的細(xì)節(jié),按照函數(shù)調(diào)用規(guī)則就可以使用了,比如,標(biāo)準(zhǔn)c提供的函數(shù)double sin(double x),你只要知道這是個計算正弦函數(shù)值的函數(shù)即可,拿來可用而不必去看具體標(biāo)準(zhǔn)函數(shù)庫是怎樣計算的。
*你的函數(shù)如果寫得正確、經(jīng)典的話,完全可以封裝成標(biāo)準(zhǔn)函數(shù)拿給其他人使用,甚至可以不提供源代碼就可以。
*沒有返回值的函數(shù)又可以叫子程序