學(xué)院-c基礎(chǔ)講義課堂版_第1頁
學(xué)院-c基礎(chǔ)講義課堂版_第2頁
學(xué)院-c基礎(chǔ)講義課堂版_第3頁
學(xué)院-c基礎(chǔ)講義課堂版_第4頁
學(xué)院-c基礎(chǔ)講義課堂版_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

愉快的開始 O INCLUDE頭文件包 MAIN函 注 {}括號(hào),程序體和代碼 和定 C語言自定義名字的要 PRINTF函 RETURN語 System系統(tǒng)調(diào) System返回值在windows和unix下的不同 C語言編譯過程,GCC參數(shù)簡 C語言編譯過 -E預(yù)編 -c編 ..............................................................................................................................操作系統(tǒng)結(jié) 用戶模 內(nèi)核模 64位,32位系統(tǒng)區(qū) CPU結(jié)構(gòu)與寄存 RISC與CISU構(gòu) SPARC,x86與 匯編語 I386匯編簡 VS反匯 IDE工 QT常用快捷 VS常用快捷 C語言中的數(shù)據(jù)類 常 字符串常 二進(jìn)制數(shù)、位、字節(jié)與 八進(jìn) 十六進(jìn) 原 反 補(bǔ) INT類 int常量,變 printf輸出int printf輸出八進(jìn)制和十六進(jìn) 有符號(hào)數(shù)和無符號(hào) short,long,longlong,unsigned 整數(shù)溢 大端對(duì)齊與小端對(duì) CHAR類 char常量,變 printf輸出 不可打印char轉(zhuǎn)義 char和unsigned 浮點(diǎn)FLOAT,DOUBLE,LONGDOUBLE類 浮點(diǎn)常量,變 printf輸出浮點(diǎn) 類型限 字符串格式化輸出和輸 字符串在計(jì)算機(jī)的方 運(yùn)算符表達(dá)式和語 基本運(yùn)算 4.1.1 4.1.2 4.1.3 4.1.7 - 逗號(hào)運(yùn)算 運(yùn)算符優(yōu)先 復(fù)合語 類型轉(zhuǎn) 條件分支語 關(guān)系運(yùn)算 5.1.5 5.1.6 關(guān)系運(yùn)算符優(yōu)先 邏輯運(yùn)算 IF IFELSE 條件運(yùn)算符 GOTO語句與標(biāo) 循環(huán)語 DO 循環(huán)嵌 數(shù) 一維數(shù)組定義與使 數(shù)組在內(nèi)存的方 一維數(shù)組初始 冒泡排 二維數(shù)組定義與使 二維數(shù)組初始 數(shù) 字符串與字符數(shù) 字符數(shù)組定 字符數(shù)組初始 字符數(shù)組使 隨機(jī)數(shù)產(chǎn)生函數(shù)RAND與 用SCANF輸入字符 字符串的結(jié)束標(biāo) 字符串處理函 fgets函 puts函 fputs函 strlen,字符串長 strcat,字符串追 strncat,字符串有限追 strcmp,字符串比 strncmp,字符串有限比 strcpy字符串拷 strncpy字符串有限拷 sprintf,格式化字符 Sscanf函 strchr查找字 strstr查找子 strtok分割字符 atoi轉(zhuǎn)化為 atof轉(zhuǎn)化為 atol轉(zhuǎn)化為 函 函數(shù)的原型和調(diào) 函數(shù)的形參與實(shí) 函數(shù)的返回類型與返回 MAIN函數(shù)與EXIT函 函數(shù)的遞 遞歸的過程分 遞歸的優(yōu) 遞歸的缺 多個(gè)源代碼文件程序的編 頭文件的使 #include與#define的意 #ifndef與 指 指 指針的概 指針變量的定 &取地址運(yùn)算 無類型指 指針的兼容 指向常量的指針與指針常 指針與數(shù)組的關(guān) 指針運(yùn) 通過指針使用數(shù)組元 指針數(shù) 指向指針的指針(二級(jí)指針 指針變量做為函數(shù)的參 數(shù)組名作為函數(shù)參 CONST關(guān)鍵字保護(hù)數(shù)組內(nèi) 指針做為函數(shù)的返回 指針小 字符指針與字符 指針和字符 通過指針字符串?dāng)?shù) 函數(shù)的參數(shù)為CHAR 指針數(shù)組做為MAIN函數(shù)的形 內(nèi)存管 作用 auto自動(dòng)變 register寄存器變 代碼塊作用域的靜態(tài)變 代碼塊作用域外的靜態(tài)變 全局變 外部變量與extern關(guān)鍵 全局函數(shù)和靜態(tài)函 內(nèi)存布 代碼 靜態(tài) 棧 堆 堆的分配和................................................................................................................... 結(jié)構(gòu)體,聯(lián)合體,枚舉與 結(jié)構(gòu) 定義結(jié)構(gòu)體struct和初始 結(jié)構(gòu)體成 結(jié)構(gòu)體的內(nèi)存對(duì)齊模 指定結(jié)構(gòu)體元素的位字 結(jié)構(gòu)數(shù) 嵌套結(jié) 結(jié)構(gòu)體的賦 指向結(jié)構(gòu)體的指 指向結(jié)構(gòu)體數(shù)組的指 結(jié)構(gòu)中的數(shù)組成員和指針成 在堆中創(chuàng)建的結(jié)構(gòu) 將結(jié)構(gòu)作為函數(shù)參 結(jié)構(gòu),還是指向結(jié)構(gòu)的指 聯(lián)合 枚舉類 枚舉定 默認(rèn) 文件操 二進(jìn)制和文本模式的區(qū) GETC和PUTC函 EOF與FEOF函數(shù)文件結(jié) STAT函 FREAD和FWRITE函 FREAD與 通過FWRITE將結(jié)構(gòu)保存到二進(jìn)制文件 FSEEK函 L函 FFLUSH函 REMOVE函 RENAME函 VS2013的C4996錯(cuò) 愉快的開始 o行序可以在64位的windows運(yùn)行。include頭文件包#include的意思就是頭文件包含,使用C語言庫函數(shù)需要提前包含庫函數(shù)對(duì)應(yīng)的頭文 Include有兩種寫 下,那么需要用#include“文件名”,如果文件在當(dāng) 下,那么用”mainmain函數(shù)又叫主函數(shù),main函數(shù)是c語言程序的,程序是從main函數(shù)開始執(zhí)行的,一個(gè)c語言程序中只能有一個(gè)main函數(shù),注 */塊注行注釋是從c++語言借鑒過來{}程序體,{語句和定inta;//定義一個(gè)變量externintb;//一個(gè)變量Cprintf returnreturn代表函數(shù)執(zhí)行完畢,返回.return代表函數(shù)的終止候前面是void,那么return后面什么也不需要寫SystemSystem返回一個(gè)整 執(zhí)行一個(gè)程序,那么這個(gè)程序的調(diào)用者就是自己寫的代碼本身C語言所有的庫函數(shù)調(diào)用,只能保證語法是一致的,但不能保證執(zhí)行結(jié)果是一致的,同樣 是一個(gè)標(biāo)準(zhǔn),只要符合這個(gè)標(biāo)準(zhǔn)的函數(shù),在不同的系統(tǒng)下執(zhí)行的結(jié)果就可以一Unixlinux很多庫函數(shù)都是支持POSIX的windows支持的比較差C語言編譯過程,gcc參數(shù)簡C語言編譯過3gcc-oa11.c-E預(yù)編譯a1.c,預(yù)編譯之后的文件名叫在C語言中#開頭的語句又叫預(yù)編譯指令gcc-oa.o-c編譯a11.c,編譯后的文件名叫C語言寫的程序是需要依賴各種庫的,所以編譯之后還需要把庫到最終的可執(zhí)行程Gcc沒有單獨(dú)的參gcc-oaa.o,最后生成的文件叫a用戶模內(nèi)核模64位,32位系CPU結(jié)構(gòu)與寄存32RISC與 U構(gòu)CISC復(fù)雜指令SPARC,x86I386匯編簡VS反匯IDEQT常用快捷鍵CtrlI,自動(dòng)格式化代碼Ctrl+/,注釋/取消注釋Altenter,F9,F5,調(diào)試運(yùn)Ctrl+r,不調(diào)試運(yùn)行F10,next調(diào)試VS常用快捷Ctrlk,Ctrlf,CtrlkCtrlc,Ctrlk,Ctrlu,F9,F5,調(diào)試運(yùn)CtrlF5,CtrlShiftb,編譯,不運(yùn)行F10,next調(diào)試C常#defineMAX定義了一個(gè)常量名字叫MAX,值是100,用define定義的常量一般用大寫字母MAX=10;這是錯(cuò)誤的,常量的值在程序運(yùn)行期間不可以改變?cè)赾語言中,使用宏constinta=Const常量字符串常“o用””引起來的量就叫字符兩個(gè)字為雙字,簡稱DWORD012345671011121314151617012是十進(jìn)制的100011223344原反補(bǔ)-7的補(bǔ)碼:=1用補(bǔ)碼進(jìn)行運(yùn)算,減法可以通過加法7-7的補(bǔ)碼和-6的補(bǔ)碼相加:0000011111111010-7+6=--76的補(bǔ)碼相加:1111100100000110sizeof關(guān)鍵sizeofsize_t 不是函數(shù),所以不需要包含任何頭文件,計(jì)算一個(gè)數(shù)據(jù)類型的大小size_t32位操作系統(tǒng)下unsignedint,就是一個(gè)無符號(hào)的intint常量,變%x,輸16進(jìn)制printf輸出八進(jìn)制和十六進(jìn)有符號(hào)數(shù)和無符號(hào)有符號(hào)數(shù)就是最為符號(hào)位,0代表正數(shù),1代表負(fù)數(shù)無符號(hào)數(shù)最不是符號(hào)位,而就是數(shù)的一部分而已。10111111000011111111000010111010,如果當(dāng)有符號(hào)數(shù)看待,那么他是一個(gè)負(fù)數(shù)的定義一個(gè)無符號(hào)的intshort,long,longlong,unsigned 最大能存放多大的十六進(jìn)制數(shù)一個(gè)大的類型賦值給一個(gè)小的數(shù)據(jù)類型,那么就可能丟失。Longlong長長整型,longlong3264位系統(tǒng)下都是8個(gè)字節(jié)Unsignedint,unsignedshort,unsignedlong,unsignedlonglong100u代表unsignedint類型的常量,如果想表達(dá)一個(gè)unsignedlonglong類型的常整數(shù)溢區(qū)別,符號(hào)位溢出會(huì)導(dǎo)致數(shù)的正負(fù)發(fā)生改變,但最的溢出會(huì)導(dǎo)致最丟失。大端對(duì)齊與小端對(duì)齊。X86和ARM都是小端對(duì)齊的。齊,很多unix服務(wù)器的CPU是大端對(duì)齊的。charchar常量,變量‘a(chǎn)’char類型的常量Chara;//char,名字叫Char最大多大?-128127之間,unsignedchar0255%c輸出一char類型的常量或者變不可打char轉(zhuǎn)義\a,\\\’單引\”雙引\?char取值范圍為-128到127unsignedchar為0-255float,double,longdouble浮點(diǎn)常量,變Floata;//Doubleb;//doubleprintf輸出浮點(diǎn)%f,%Lf,不能用輸出整型的轉(zhuǎn)移符來輸出一個(gè)浮const是定義一個(gè)常代表定義一個(gè)變量,這個(gè)變量值可能在CPU指令之外被改通過 定義的變量,編譯器不會(huì)自作聰明的去優(yōu)化這個(gè)變量相關(guān)的代碼生效,如果沒有空閑寄存器,那么register無效。字符串在計(jì)算機(jī)的方字符串是內(nèi)存中一段連續(xù)的char空間,以’\0’結(jié)printf函數(shù),putcharputchar輸出一個(gè)charprintf格式字符d接受整數(shù)值并將它表示為有符號(hào)的十進(jìn)制ShortUnsignedshortounsigneduunsignedx/unsigned16進(jìn)制整數(shù),x對(duì)應(yīng)的是ffloat單精度浮點(diǎn)數(shù)或e/cs/char*/wchar_tpvoid16進(jìn)制形式輸出%%l-m(代表一個(gè)整數(shù)0將輸出的前面補(bǔ)上0 不可以搭配使用 -N(代表一個(gè)整數(shù)n位不夠以空格填充scanf函數(shù)與getchargetchar是從標(biāo)準(zhǔn)輸入設(shè)備一個(gè)inta1;基本運(yùn)算.2加4.1.3減*乘/除%.8-逗號(hào)運(yùn)算inta=2;intb=3;intc=4;intd=inti=(a=b,c+運(yùn)算符優(yōu)先1((,{}(,-2++,--,+(前綴),-(前綴),!(前綴),~(前綴),sizeof,*(3*,/,45<<6<><=7==8&9^|?=,*=,%=,+=,-,(逗號(hào)運(yùn)算符{}代碼doublef=(double)3/關(guān)系運(yùn)算...6邏輯運(yùn)算!If條件{}ifIf條件{}{}ifelse{}Elseif{}Elseif{}{}switchSwitch量{CaseCase//當(dāng)所有case都不滿足,那么執(zhí)行}如果量的值和case后面的值相同,那么就執(zhí)行對(duì)Breakswitch句很多用switch。(條件)?1inti=-intx=(i<0)?-i:goto語句與End:這就是一個(gè)循環(huán)語while(條件{代碼塊}循環(huán)遇到break語句,立刻終端循環(huán),循環(huán)結(jié)dowhile條件while是先判斷條件,再循環(huán),dowhile是先循環(huán)再判斷條件,while有可能一次也不循for(intI=for(語句1;語句2;語句{代碼塊}循環(huán)完成后執(zhí)行語句3,之后再判斷語句2For同樣可以使用continuebreak,道理while中使用是一樣Forwhile是可以互換C語言中一個(gè)循環(huán)還可以嵌套其他的循While(條件{}IntFor(I0;I10;i++)//{循環(huán)語句//內(nèi)循}IntFor(a=0;a<10;{For(b=0;b<10;{}}數(shù)一維數(shù)組定義與使 a[10];//定義了10個(gè)int第一個(gè)變量名是a[0],第二個(gè)是a[1],最后一個(gè)是a[9],沒有數(shù)組在內(nèi)存的方inta[10]={1,2,3};//初始化前三個(gè)成員,后面所有元素都設(shè)置為0inta[10]0二維數(shù)組定義與使inta[3][4]={{1,2,3,4},inta[3][4]0將所有成員都初始化為 =數(shù)chara5[10]=chara[]= char的數(shù)組串是一種特殊的char的數(shù)組rand#include<time.h>intt=(int)tiLL);for(inti=0;i<10;{printf("%d\n",}Rand是一個(gè)c語言庫函數(shù),功能是生成一個(gè)隨機(jī)的整數(shù),rand需要一個(gè)不同的才能 函數(shù)就可以得到系統(tǒng)的時(shí)間,單位毫Time也是庫函數(shù),需要time.h這個(gè)頭文scanf輸入字符Char用戶通過鍵盤可以把一個(gè)字符串寫入一個(gè)char的數(shù)getsscanf都要注意緩沖區(qū)溢出的問fgets導(dǎo)致內(nèi)存溢出,fgets函數(shù)改進(jìn)了這個(gè)問題。大小,第三個(gè)參數(shù)如果是通過鍵盤輸入可以固定寫為stdin也做為字符串的一部分。Fgets函數(shù)是安全的,不存在緩沖區(qū)溢出的問題。Fgets(char*s,size_tlen,chars[100]={0};fgets(s,chars[100]={0};fgets(s,sizeof(s),stdin);putsint,double等其他類型。charchars[]=ofputsstdoutcharchars[]=ofputs(s,strlen,字符串長這個(gè)庫函數(shù)需要包含頭文件size_tstrlen(constchar*返回不包含字符串結(jié)尾’\0’的字符串長strcat,字符串追size_tstrcat(char*_Str1,constchar*將參數(shù)_Str2追加到_Str1strncat,字符串有限追size_tstrncat(char*_Str1,constchar*_Str2,在strcat基礎(chǔ)上增加了一個(gè)參數(shù),這個(gè)參數(shù)來標(biāo)明最多可以追加幾個(gè)strcmp,字符串比intstrcmp(constchar*_Str1,constchar*intstrncmp(constchar*_Str1,constchar*_Str2,n代表指定比較字符串strcpy字符串拷char*strcpy(char*_Str1,constchar*將參數(shù)_Str2拷貝到參數(shù)_Str1Strcpy也存在內(nèi)存溢出的問strncpy字符串有限拷char*strcpy(char*_Str1,constchar*_Str2size_tn);n代表有限拷貝。sprintfSprint使用方法與printf類似,唯一區(qū)別是增加了第一個(gè)參數(shù),第一個(gè)參數(shù)是一個(gè)char組Sscanf函Sscanf類似于scanf函數(shù),,scanf從鍵盤用戶輸入,scanf從指定格式化字符串入Sscanf多了第一個(gè)參數(shù),char的數(shù)組,sscanf會(huì)從這個(gè)char的數(shù)組中相關(guān)內(nèi)容char*strchr(char*_Str,int在參數(shù)_str中查找參數(shù)_Ch指定字符,找到返回字符_Ch在_Str中所在位置,沒有找到返NULL;strstr查找子char*strstr(char*_Str,constchar*在參數(shù)_str中查找參數(shù)_SubStr指定子串,找到返回子串在_Str中所在位置,沒有找到返NULL;strtok分割字符charcharbuf[]="abc@defg@igk";char*p=strtok(buf,"@");;while(p){printf("%s\n",p=strtok(NULL,}atoi轉(zhuǎn)化atoi的功能就是把一個(gè)char的數(shù)組轉(zhuǎn)化為一個(gè)int,需要頭文件atof轉(zhuǎn)化atol轉(zhuǎn)化Cintitoa這種函數(shù),sprintfint,或者其他類型轉(zhuǎn)化為一個(gè)字符串。函 函doubledoublecircle(doubler);intmain(){doublelength=circle(10);printf("length=%f\n",length);return0;}doublecircle(double{return2*3.14*}returnvoid函數(shù)return語句中的返回值數(shù)據(jù)類型應(yīng)該與函數(shù)定義時(shí)相如果函數(shù)中沒有return語句,那么函數(shù)將返回一個(gè)不確定的mainexit函數(shù)的遞voidrecurse(intvoidrecurse(int{if(i>if(i>{recurse(i-}printf("i=%d\n",}int{return0;}遞歸的過程分voidvoidup_down(int{printf("in%d,location%p\n",n,&n);if(n<4)up_down((n+printf("out%d,location%p\n",n,}int{return0;}少歲,他回答比前面一個(gè)2歲,一直問到最后問第一個(gè)人,他回答10歲intintage(int{intif(n==1)i=10;ii=age(n-1)+2;returni;}將10進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制數(shù)的2342*1023*1014*100次方。奇數(shù)的二進(jìn)制最后一位一定是1,偶數(shù)的二進(jìn)制最后一位一定是0??梢酝ㄟ^number%2得到二進(jìn)制形式的最后一位,如果要將一個(gè)完整的整數(shù)轉(zhuǎn)化為二number2的值,然后在遞歸調(diào)用語句之后進(jìn)行輸出,這樣計(jì)算2,這種計(jì)算相當(dāng)于十進(jìn)制下把小數(shù)點(diǎn)左移一位,如1。voidvoidto_binary(unsignedint{unsignedinti=n%2;if(n>=2)to_binary(n/2);printf("%c",i+0x30);}那契數(shù)列例0,1,1,2,3,5,8,13,21,34,55,89,144intintfib(int{if(n==0)if(n==1)if(n>returnfib(n-1)+fib(n-}遞歸的優(yōu)遞歸的缺頭文件的使main函數(shù)放在第一個(gè)文件中,而把自定義函數(shù)放在第二個(gè)文件中,那么就需要在第一個(gè)文件中函數(shù)原型。把函數(shù)放入頭文件是很好的。#include與#define的意義#define定義一個(gè)宏常量#ifndef與 這是個(gè)預(yù)編譯指令,代表只要定義了一個(gè)常量,那么就預(yù)編譯下面的#ifdef#ifndef宏#endif指指指針的概*p;//代表指針?biāo)竷?nèi)存的實(shí)際數(shù)int*p=&取地址運(yùn)Registerinta;//寄存器變量,這種變量不在內(nèi)存里面,而在CPU里面,所以是沒有地址的無類型指為其他類型指針,也可以用(void*)將其他類型指針強(qiáng)制轉(zhuǎn)化為void類型指針。void*p,指針之間賦值需要類型相同,但任何類型的指針都可以賦值給voidNULLC語言中的定義為(void空指針就是指向了NULL的指針變*inta[10];int*p=賦值:int*p求值:intIint**pp將一個(gè)整數(shù)加(減)給指針:p+3;p增加(減少)p++,p求差值,p1–p2,通常用于同一個(gè)數(shù)組內(nèi)求兩個(gè)元間的距離p1p2,p+5代表&a[5]int指向指針的指針(二級(jí)指針inti=10;int*p1=&i;int**p2=&p1;C語言中如果想通過函數(shù)修改外部實(shí)參的值,那么就需要給函數(shù)的參數(shù)傳遞這個(gè)實(shí)參數(shù)組名作為函數(shù)參intfunc(intarray[]);intfunc(intconst不希望這樣的事情發(fā)生,所以要對(duì)形參采用const參數(shù)func(constint 函需要包含頭文件#include<string.h>void*memset(void*s,intc,size_tMemset主要的功能就是把一塊內(nèi)存設(shè)置為void*memcpy(void*dest,constvoid*src,size_tn);// intintintintintintcharchars[]=char*p=p[0]=o通過指針字符串?dāng)?shù)Chars[]=Char*p=P[0]=charVoidtest(char當(dāng)函數(shù)的參數(shù)是一個(gè)字符串的時(shí)候,如果函數(shù)并不改變實(shí)參的值,那么就把形參定義為contchar*,這樣函數(shù)的使用會(huì)更方便。mainintmain(intargc,char的每個(gè)成員都是char*類型argv是命令行參數(shù)的字符串?dāng)?shù) 代表命令行參數(shù)的數(shù)量,程序名字本身就算內(nèi)存管auto自動(dòng)變有自動(dòng)變量的周期就是變量所屬的大括號(hào)register寄存器變通常變量在內(nèi)存當(dāng)中,如果能把變量放到 的寄存器里面,代碼執(zhí)行效率會(huì)更registerint代碼塊作用StaticintI0;//程序結(jié)束的時(shí)候才從內(nèi)存,同時(shí)靜態(tài)變量的值只初始化一次。代碼塊作用域外的靜態(tài)變static的全局變量在全局變外部變量extern關(guān)鍵 I;一個(gè)變量,這個(gè)變量在別的文件中已經(jīng)定義了,這里只是使用,而不是義全局函數(shù)和靜態(tài)函在C語言中函數(shù)默認(rèn)都是全局的,使用關(guān)鍵字static可以將函數(shù)為靜態(tài),函數(shù)定義為static就意味著這個(gè)函數(shù)只能在定義這個(gè)函數(shù)的文件中使用,在其他文件中不能調(diào)用,即使在其他文件中這個(gè)函數(shù)都沒用。對(duì)于不同文件中的staitc函數(shù)名字可以相同代碼靜態(tài)inta=0;inta=0;staticintb=0;intmain(){printf("%p,%p\n",&a,&b);return0;}inta=0;int{staticintb=0;printf("%p,%p\n",&a,&b);return0;}棧由編譯器自動(dòng)放出棧中,當(dāng)一個(gè)自動(dòng)變量超出其作用域時(shí),自動(dòng)從棧出。序在編譯的時(shí)候就可以指定棧的大小,linux棧的大小是可以通過環(huán)境變量設(shè)置的。堆heap和棧一樣,也是一種在程序運(yùn)行過程中可以隨時(shí)修改的內(nèi)存區(qū)域,但沒有棧那樣堆的分配和void*malloc(size_tvoidfree(voidfree負(fù)責(zé)在堆中malloc分配的內(nèi)存。參數(shù)p為malloc返回的堆中的內(nèi)存地void*calloc(size_t_Count,size_tcalloc與malloc類似,負(fù)責(zé)在堆中分配內(nèi)存。Malloc只分配,但不負(fù)責(zé)清理內(nèi)存calloc分配內(nèi)存的同時(shí)把內(nèi)存清callo自動(dòng)將分配的內(nèi)存置0intint*p(int*)calloc(100,sizeof(int));//100void*realloc(void*p,size_tp為之前用malloc或者calloc分配的內(nèi)存地址,_NewSize為重新分配內(nèi)存的如果參數(shù)pNULL,那reallocmalloc功能一結(jié)構(gòu)體,聯(lián)合體,枚舉與定義結(jié)構(gòu)struct和初始structstruct{intage;structmanm={"tom",12structmanm={.name="tom",.age=12結(jié)構(gòu)體成structstructchara;intb;structstructchara2;//指定元素為2位長,不是2結(jié)構(gòu)數(shù)structmanm[10]={{"tom",12},{"marry",10},{"jack",9}structmanm[10]={{"tom",12},{"marry",10},{"jack",9}嵌套結(jié)structstruct charlast[100];structstructnamesname;intage;structmanm={{"wang","wu"},20結(jié)構(gòu)體的賦structnamea=指向結(jié)構(gòu)體的指 等同p-Structmanm[10];Structman*p=結(jié)構(gòu)中的數(shù)組成員和指針成structstruct{intage;struct{intage;在堆中創(chuàng)建的結(jié)構(gòu)structstruct{intage;structman*s=malloc(sizeof(structman)*2);s[0].name=malloc(10*sizeof(char));s[1].names[1].name=malloc(10*結(jié)構(gòu),還是指向結(jié)構(gòu)的指聯(lián)合union是一個(gè)能在同一個(gè)空間不同類型數(shù)據(jù)的類型。聯(lián)variant{intivalue;charcvalue;doubleint{unionvariantvar;var.cvalue=12;printf("%p,%p,%p\n",&(var.cvalue),&(var.ivalue),return}枚舉定實(shí)際上,enum常量int類型的enumenumspectrum{red,yellow,green,blue,white,black};enumspectrumcolor;color=black;if(color!=red)默認(rèn)enumenumspectrum{red,yellow,green,blue,white,black};printf("%d,%d\n",red,black);enumenumspectrum{red=10,yellow=20,green,blue,white,black};printf("%d,%d\n",red,black); 是一種高級(jí)數(shù)據(jù)特性,它能使某一類型創(chuàng)建自己的typedefunsignedchartypedefunsignedchar1與#define不同,typedef僅限于數(shù)據(jù)類型,而不是能是表達(dá)式或具體 是編譯器處理的,而不是預(yù)編譯指3typedef比#define更靈文件操FILE*fopen(constchar*path,constcharFopen打開文件成功,返回有FILE的有效地址,失敗返Path就是指定打開文件的路徑,可以是相對(duì)路徑,也可以是絕對(duì)路徑,mode有以下幾r++rw+w+打開可讀寫文件,若文件存在則文件長度清為零,即該文件內(nèi)容會(huì)。若文件不存a以附加的方式打開只寫文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾,即文件原先的內(nèi)容會(huì)被保留。(EOF符保留)a+以附加方式打開可讀寫的文件。若文件不存在,則會(huì)建立該文件,如果文件存在,寫入的數(shù)據(jù)會(huì)被加到文件尾后,即文件原先的內(nèi)容會(huì)被保留。(原來的EOF符不保留)windows系統(tǒng)中,文本模式下,文件以"\r\n"代表換行。若以文本模式打開文件,并在windows讀寫文本文件的時(shí)候,是不寫b,但讀寫二進(jìn)制文件的時(shí)候一定要寫fclosefopen打開的文getcputcintgetc(FILEgetc的功能是以字節(jié)位單位文件內(nèi)容#defineEOF-1int{FILE*fp=fopen("a.txt",int{FILE*fp=fopen("a.txt",charwhile((c=constchar*s="oworld";inti;}{printf("%c",}return0;for(i=0;i<strlen(s);{putc(s[i],}return0;}EOFfeof函數(shù)程序怎么才能知道是否已經(jīng)到達(dá)文件結(jié)尾了呢 代表文件結(jié)如果已經(jīng)是文件尾,feof函數(shù)返回trueEOFEOF是無效的 函這些函數(shù)都是通過FILE*來對(duì)文件進(jìn)行讀寫續(xù)調(diào)用,返回NULLstat#includeintstat(constchar*_Filenamestructstat*_Stat)structstat/*IDofdevicecontainingfile/*inodenumber/*protection/*numberofhardlinks/*userIDofowner/*groupIDofowner /*deviceID(ifspecialfile)*/ /*totalsize,inbytes*/blksize_tst_blksize;/*blocksizeforfilesystemI/O*/ /*numberof512Bblocksallocated*/ /*timeoflastaccess*/ /*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論