| int atoi(char *s) { int sign=1,m=0; if(*s=='+'||*s=='-') /*判斷是否有符號(hào)*/ sign=(*s++=='+')?1:-1; /*用到三目運(yùn)算符*/ while(*s!='\0') /*對(duì)每一個(gè)字符進(jìn)行操作*/ { m=m*10+(*s-'0'); s++; /*指向下一個(gè)字符*/ } return m*sign; } |
指向多維數(shù)組的指針變量也是一個(gè)比較廣泛的運(yùn)用。例如數(shù)組a[3][4],a代表的實(shí)際是整個(gè)二維數(shù)組的首地址,即第0行的首地址,也就是一個(gè)指針變量。而a+1就不是簡(jiǎn)單的在數(shù)值上加上1了,它代表的不是a[0][1],而是第1行的首地址,&a[1][0]。
指針變量常用的用途還有把指針作為參數(shù)傳遞給其他函數(shù),即指向函數(shù)的指針。
看下面的幾行代碼:
| void Input(ST *); void Output(ST *); void Bubble(ST *); void Find(ST *); void Failure(ST *); /*函數(shù)聲明:這五個(gè)函數(shù)都是以一個(gè)指向ST型(事先定義過(guò))結(jié)構(gòu)的指針變量作為參數(shù),無(wú)返回值。*/ void (*process[5])(ST *)={Input,Output,Bubble,Find,Failure}; /*process被調(diào)用時(shí)提供5種功能不同的函數(shù)共選擇(指向函數(shù)的指針數(shù)組)*/ printf("\nChoose:\n?"); scanf("%d",&choice); if(choice>=0&&choice<=4) (*process[choice])(a); /*調(diào)用相應(yīng)的函數(shù)實(shí)現(xiàn)不同功能*;/ |
總之,指針的應(yīng)用是非常靈活和廣泛的,不是三言兩語(yǔ)能說(shuō)完的,上面幾個(gè)小例子只是個(gè)引子,實(shí)際編程中,會(huì)逐漸發(fā)現(xiàn)運(yùn)用指針?biāo)軒?lái)的便利和高效率。
文件:
| 函數(shù)調(diào)用形式 | 說(shuō)明 |
| fopen("路徑","打開(kāi)方式") | 打開(kāi)文件 |
| fclose(FILE *) | 防止之后被誤用 |
| fgetc(FILE *) | 從文件中讀取一個(gè)字符 |
| fputc(ch,FILE *) | 把ch代表的字符寫(xiě)入這個(gè)文件里 |
| fgets(FILE *) | 從文件中讀取一行 |
| fputs(FILE *) | 把一行寫(xiě)入文件中 |
| fprintf(FILE *,"格式字符串",輸出表列) | 把數(shù)據(jù)寫(xiě)入文件 |
| fscanf(FILE *,"格式字符串",輸入表列) | 從文件中讀取 |
| fwrite(地址,sizeof(),n,F(xiàn)ILE *) | 把地址中n個(gè)sizeof大的數(shù)據(jù)寫(xiě)入文件里 |
| fread(地址,sizeof(),n,F(xiàn)ILE *) | 把文件中n個(gè)sizeof大的數(shù)據(jù)讀到地址里 |
| rewind(FILE *) | 把文件指針撥回到文件頭 |
| fseek(FILE *,x,0/1/2) | 移動(dòng)文件指針。第二個(gè)參數(shù)是位移量,0代表從頭移,1代表從當(dāng)前位置移,2代表從文件尾移。 |
| feof(FILE *) | 判斷是否到了文件末尾 |





