锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鏂囦歡 C紼嬪簭,灝嗘枃浠剁湅鍋氭槸榪炵畫瀛楄妭搴忓垪,鍏朵腑姣忎釜瀛楄妭閮藉彲浠ュ崟鐙鍙?/span>.榪欎釜涓?/span>UNIX鐜涓殑鏂囦歡緇撴瀯鏄竴鑷寸殑.浣?/span>ANSI C涓轟簡涓庡叾浠栫殑OS鐜鍏煎(姣斿Windows),鎻愪緵浜嗕袱縐嶆枃浠惰鍥?/span>: 鏂囨湰瑙嗗浘鍜屼簩榪涘埗瑙嗗浘. 鏂囨湰瑙嗗浘鍜屼簩榪涘埗瑙嗗浘 浜岃繘鍒惰鍥句腑,鏂囦歡涓殑姣忎釜瀛楄妭閮藉彲浠ヤ負紼嬪簭璁塊棶.浣嗘枃鏈鍥句腑,紼嬪簭涓湅鍒扮殑鍐呭涓庢枃浠剁殑鍐呭鍙兘涓嶅悓. 渚嬪MS-DOS鏂囨湰鏂囦歡鐢?/span>"\r\n"鏉ヨ〃紺鴻灝?/span>; Macintosh鏂囨湰鏂囦歡涓敤"\r"琛ㄧず琛屽熬; C紼嬪簭浣跨敤"\n"琛ㄧず琛屽熬. So,濡傛灉C紼嬪簭浠ユ枃鏈鍥炬ā寮忓鐞嗕竴涓?/span>MS-DOS鏂囨湰鏂囦歡,鍦ㄨ鍙栨枃浠舵椂,灝變細灝?/span>"\r\n"杞崲涓?/span>"\n",鍦ㄥ啓鍏ユ枃浠舵椂,灝變細灝?/span>"\n"杞崲涓?/span>"\r\n". Macintosh鍚岀悊. 璇寸櫧浜?/span>,涓ょ瑙嗗浘鐨勫疄鐜版槸涓鏍風殑,鍙槸鍦ㄥ鐞嗚灝炬垨澶勭悊鏂囦歡緇撳熬鏃舵湁鐐逛笉鍚岃屽凡.閲囩敤鏌愮瑙嗗浘鎵撳紑鏂囦歡鏃?/span>,娉ㄦ剰涓涓嬪氨鏄簡. 鏂囦歡緇撳熬鍜屾崲琛?/span> 鏂囦歡璇誨彇鏁版嵁鐨勭▼搴忛渶瑕佸湪杈懼埌鏂囦歡緇撳熬鏃跺仠姝?/span>.褰撳埌杈炬枃浠剁粨灝炬椂,"getc()"鍑芥暟浼氳繑鍥炰竴涓壒孌婂?/span>EOF.鎵浠?/span>C紼嬪簭鍙湁鍦ㄨ鍙栬秴鍑烘枃浠剁粨灝懼悗,鎵嶄細鍙戠幇鏂囦歡鐨勭粨灝?/span>. 涓轟簡閬垮厤璇誨彇絀烘枃浠跺甫鏉ョ殑闂,搴旇瀵規(guī)枃浠惰緭鍏ヤ嬌鐢ㄥ叆鍙f潯浠跺驚鐜?/span>(浣跨敤while鎴?/span>for,閬垮厤浣跨敤do...while)濡備笅璁捐: 涓婇潰鐨勪緥瀛愬彲浠ョ湅鍋氭槸涓涓鏋?/span>,鏉ヨ繘琛屾枃浠剁粨灝劇殑鍒ゆ柇.浣?/span>ANSI C鐨勪袱縐嶆ā寮?/span>,瀵逛簬鏂囦歡緇撳熬鏈変笉鍚岀殑瑙i噴. 濡傛灉鏂囦歡浠ユ枃鏈ā寮忔墦寮,C鍙互璁ゅ嚭EOF鏍囧織鏂囦歡緇撳熬.濡傛灉浠ヤ簩榪涘埗妯″紡鎵撳紑,灝變細鎶?/span>EOF褰撳仛鏄枃浠朵腑鐨勪竴涓瓧絎?/span>.鐪熸鐨勬枃浠剁粨灝捐繕鍦ㄥ悗闈?/span>.鏂囦歡鐨勭粨灝?/span>,鍙兘绱ц窡鐫EOF,褰撶劧,涔熷彲鑳界敤絀哄瓧絎﹀~鍏呮枃浠朵嬌鍏跺ぇ灝忎負256(鎴栧叾浠栨暟)鐨勫嶆暟.鍦?/span>DOS涓嬩笉鎵撳嵃絀哄瓧絎?/span>.紼嬪簭涓寘鍚簡闃叉紼嬪簭鎵撳嵃EOF瀛楃鐨勪唬鐮?/span>. MS-DOS鐨勬枃鏈枃浠剁敤浜岃繘鍒舵ā寮忓拰鏂囨湰妯″紡鎵撳紑,C紼嬪簭灝嗙湅鍒頒笅闈㈢殑鍐呭: 浜岃繘鍒舵ā寮忔墦寮鏂囦歡C紼嬪簭鐪嬪埌鐨勫唴瀹?/span>: line1\r\n line2\r\n line3\r\n ^Z 鏂囨湰妯″紡鎵撳紑鏂囦歡C紼嬪簭鐪嬪埌鐨勫唴瀹?/span>: line1\n line2\n line3\n ^Z 渚嬪瓙 : 閫嗗簭杈撳嚭涓涓枃浠跺唴瀹?/span>
FILE* fp;
fp = fopen ("_FileName", "_Mode");
ch = getc (fp);
while (ch != EOF)
{
putchar (ch);
ch = getc (fp);
}
#include <stdlib.h>
#define MAC
#define CNTL_Z '\032' /* DOS Text File End Of File Flag */
#define SLEN 50
#define PATH
int main (void)
{
unsigned char file[SLEN];
unsigned char ch;
FILE* fp;
unsigned long count;
unsigned long last;
puts ("Enter Name Of File To Be Processed : ");
gets (file);
if ((fp = fopen (file, "rb")) == NULL)
{
printf ("Reverse Can't Open %s .\n", file);
exit (1);
}
fseek (fp, 0L, SEEK_END); /* Locate To End Of File */
last = ftell (fp);
for (count = 1L; count <= last; count++)
{
fseek (fp, -count, SEEK_END); /* Back 1 Byte */
ch = getc (fp);
if (ch != CNTL_Z && ch != '\r')
{
putchar (ch);
}
#if defined MAC || defined WIN32
/* Macintosh || Windows */
if (ch == '\r')
{
putchar ('\n');
}
else
{
putchar (ch);
}
#endif
putchar ('\n');
fclose (fp);
return 0;
}
}
2) int* A pointer point to an Integer
3) int** A pointer point to a pointer what point to an Integer
4) int* arr[N] An array that each element is a pointer point to an Integer
5) int(*arr)[N] A pointer point to an array that its each element is an Integer and it have N elements.
6) int (*fun)(int) A pointer point to a function what with an integer parameter and with an integer returning.
7) int (*fun[N])(int) An array that have N elements and each element is a pointer point to a point that point to a type of function that have an integer parameter and with an integer returning.
Maybe understand (4) type just like this :
int*[N] arr;
It means "arr"'s type is int*[]. And how to catch the meaning of int*[]? At first it's an array, and each element of this array is a pointer point to an integer.
And can understand (5) type just like this :
int[N]* arr;
It means "arr"'s type is int[]*. That's to show that this type is a pointer and this pointer point to an integer array its size is N.
It means this variable value named "fun" and its type
Well, the above are so complex, and we should follow the KISS principle that is Keep It Simple, Stupid.
Did you catch it ??