重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
tag的含義其實就是一個flag,標(biāo)記遇到空格時的處理
創(chuàng)新互聯(lián)建站主營昆都侖網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機APP定制開發(fā),昆都侖h5微信平臺小程序開發(fā)搭建,昆都侖網(wǎng)站營銷推廣歡迎昆都侖等地區(qū)企業(yè)咨詢
因為遇到空格的時候有可能是一個單詞開始或者是一個單詞的終止
當(dāng)tag==1的時候判斷是單詞終止
此時sum++
當(dāng)tag==0的時候是單詞開始 此時不計數(shù) 再遇到空格是sum++
這個程序的目的是打印出2-100內(nèi)所有的素數(shù)。首先2是一個很特殊的素數(shù),偶素數(shù)就那么一個,呵呵!接下來for(i=3;i=100;i+=2)的目的就是遍歷所有可能的奇數(shù)。而for(k==2;ksqrt(i)tag==0;k++)一段就是判斷i是否為素數(shù)。這里的tag是一個作為標(biāo)簽,0代表是素數(shù),1代表的是合數(shù)。注意到 if(i%k==0) tag=1; 表示有數(shù)字可整除它的時候,那么它就不是素數(shù)了。 if(tag==0) printf("%d, ",i); 前面已經(jīng)提到了,0代表是素數(shù),那么就打印咯~~
如果要寫個函數(shù)支持多種數(shù)據(jù)類型,首先想到的就是C++的模板了,但是有時候只能用C語言,比如在linux內(nèi)核開發(fā)中,為了減少代碼量,或者是某面試官的要求…
考慮了一陣子后,就想到了qsort上.qsort的函數(shù)原型:
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
快排時,只要自己實現(xiàn)相應(yīng)數(shù)據(jù)類型的比較函數(shù)cmpare就可以了.如果比較int型時,一個典型的compare函數(shù)如下:
那么,就是說可以利用void *. void *意指未指定類型,也可以理解為任意類型。其他類型的指針可以直接賦值給void *變量,但是void *變量需要強制類型轉(zhuǎn)換為其它指針類型。這個相信大家都知道。那么下面以一個簡單的題目為例,來探討如何在C語言中實現(xiàn)模板函數(shù)。
方法1: 利用void *.
在看下面的源程序之前,需要了解幾點。首先,在32位平臺上,任何類型的指針?biāo)嫉淖止?jié)都是4個字節(jié),因為32位機器虛擬內(nèi)存一般為4G,即2的32次方,只要32位即4個字節(jié)就可以足夠?qū)ぶ罚瑂izeof(void *)=4; 其次,雖然各種不同類型的指針?biāo)嫉目臻g都為4個字節(jié),但是不同類型的指針?biāo)傅目臻g的字節(jié)數(shù)卻不同(這一點尤為重要,下面的程序我在開始沒有調(diào)通就因為這點意識不強)。所以,如果你將一個指針強制轉(zhuǎn)換為另一個類型的指針,指針本身所占的字節(jié)是不變的,但是,如果對這個指針進行運算,比如 *p,p++,p-=1等一般都是不同的。 再次,函數(shù)指針應(yīng)該了解下,這里不多說。 最后,因為Sandy跟我說,C++開始的時候模板的實現(xiàn)其實就是利用宏替換,在編譯的時候確定類型。所以,為了方便,類型也用了預(yù)編譯指令#define。
span#include?"stdio.h"/span
span#include?"stdlib.h"/span
span//typedef?int?T;??//或者下面的也可以./span
span#define??T?int/span
//這個FindMin是Sandy寫的.felix021也寫了個,差不多的就不貼出來的.
void?FindMin(const?void??*arr,int?arr_size,int?arrmembersize,int?*index,
int?(*cmp)(const?void?*,const?void?*b)){
int?i;
*index=0;
char?*p=(char?*)arr;
char?*tmp=p;
for?(i=1;iarr_size?;i++){
if?(cmp(tmp,p)0){
tmp=p;
}
p+=arrmembersize;
}
(*index)=((int)(tmp-arr))/arrmembersize;
}
*//span
可以把指針看作是char?*,如果轉(zhuǎn)換為int?*,那下面的位移就不正確了./span
indexspan=/spanispan;/span
span}/span
span}/span
spanreturn/span?indexspan;/span
span}/span
spanint/span?resultspan;/spanspan//result保存的是最小值索引./span
resultspan=/spanFindMinspan(/spanarr,span12/span,
1、打開C-Free,按ctrl+N創(chuàng)建一個新的文件。
2、然后開始調(diào)用函數(shù)。
3、按F9進行調(diào)試后發(fā)現(xiàn)沒有錯誤。
4、按F5執(zhí)行程序。
5、輸入想要輸入的數(shù)字。
6、按ENTER鍵輸出結(jié)果,檢驗符合結(jié)果,說明函數(shù)調(diào)用成功。