色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

C 語(yǔ)言筆記

C 語(yǔ)言筆記 筆記會(huì)不定期補(bǔ)充更新數(shù)據(jù)類(lèi)型基本類(lèi)型數(shù)據(jù)整型整型 -- int 4字節(jié)短整型 -- short int 2字節(jié)長(zhǎng)整型 -- long int 8字節(jié)浮點(diǎn)數(shù)【實(shí)數(shù)】單精度浮點(diǎn)數(shù) -- float 4字節(jié)雙精度浮點(diǎn)數(shù) -- double 8字節(jié)字符char 1字節(jié)復(fù)合類(lèi)型數(shù)據(jù)結(jié)構(gòu)體、 枚舉、共用體變量# includestdio.h int main(void) { int i; i 3; printf(i %d\n,i);//3最終是存放在內(nèi)存中程序終止后3所占的空間被釋放 return 0; }讓內(nèi)存條中的一塊空閑單元與所定義變量產(chǎn)生關(guān)聯(lián)。變量的本質(zhì)就是內(nèi)存中的一段存儲(chǔ)空間程序終止后內(nèi)存空間被釋放。變量必須初始化就是賦值的原因替代內(nèi)存中原來(lái)的垃圾值。單個(gè)字符變量要用單引號(hào)括起來(lái)字符串要用雙引號(hào)括起來(lái)。字符串不能賦給單個(gè)字符變量char。單引號(hào)也不能括字符串。printf用法將變量的內(nèi)容輸出到顯示器上。1.printf字符串;2.printf (輸出控制符輸出參數(shù));3.printf輸出控制符1 輸出控制符2 ......,輸出參數(shù)1,輸出參數(shù)2.........);4.printf(輸出控制符 非輸出控制符,輸出參數(shù));輸出控制符%d %ld %c %f %lf %x %s輸出控制符可以清楚的表明所輸出的內(nèi)容所表達(dá)的具體含義。scanf用法通過(guò)鍵盤(pán)將數(shù)據(jù)輸入到變量中。1.scanf(輸入控制符,輸入變量);將輸入的數(shù)據(jù)放到輸入變量地址下存放。2.含有非輸出控制符例如逗號(hào)、字母等等。非輸入控制符必須原樣輸入。#includestdio.h int main(void) { int i; scanf(m%d,i); //m是非輸出控制符 printf(i %d\n,i); return 0; } /* 輸入123 輸出垃圾值 輸入m123 輸出123 輸入m123n 輸出123 先輸入m時(shí)計(jì)算機(jī)認(rèn)為合法輸入123也合法輸入n不合法。 */3.應(yīng)該編寫(xiě)代碼對(duì)用戶的非法輸入做適當(dāng)處理while ((ch getchar()) ! \n)continue;這段代碼的功能是從標(biāo)準(zhǔn)輸入讀取字符并且忽略這些字符直到遇到換行符為止。流程控制什么是流程控制 程序代碼的執(zhí)行順序。順序、選擇、循環(huán)。順序1. if只能控制一條語(yǔ)句的執(zhí)行else也只能控制一條語(yǔ)句。所以在執(zhí)行多條語(yǔ)句時(shí)要加{ } 。if...else...為順序執(zhí)行語(yǔ)句若出現(xiàn)多個(gè)條件同時(shí)成立則執(zhí)行最靠前的一條。2. 一個(gè)分號(hào)代表一條語(yǔ)句的結(jié)束。循環(huán)for循環(huán)# includestdio.h int main(void) { int i; int sum sum i; for(i1;i4;i) //執(zhí)行完條件判斷語(yǔ)句后執(zhí)行條件執(zhí)行語(yǔ)句然后才會(huì)執(zhí)行i sum sum i; printf(sum %d\n,sum); //在for循環(huán)結(jié)束后才會(huì)執(zhí)行printf()指令 return 0; }1.for循環(huán)同樣只能控制一條語(yǔ)句控制多條語(yǔ)句加括號(hào)。在for循環(huán)結(jié)束后才會(huì)執(zhí)行printf()指令。2. 執(zhí)行完條件判斷語(yǔ)句后執(zhí)行條件執(zhí)行語(yǔ)句然后才會(huì)執(zhí)行i。3.強(qiáng)制類(lèi)型轉(zhuǎn)換格式(數(shù)據(jù)類(lèi)型)(表達(dá)式)功能把表達(dá)式的值強(qiáng)制轉(zhuǎn)化為前面所執(zhí)行的數(shù)據(jù)類(lèi)型。4.浮點(diǎn)數(shù)存儲(chǔ)帶來(lái)的問(wèn)題float和double都不能保證可以精確的存儲(chǔ)一個(gè)小數(shù)。舉例有一個(gè)浮點(diǎn)型變量x如何判斷x的值是否為零if(x 0) //不一定能判斷正確判斷條件可以寫(xiě)成if|x-0.000001| 0.000001是else不是while循環(huán)1.格式while表達(dá)式執(zhí)行語(yǔ)句2.while同樣只能控制一條語(yǔ)句的執(zhí)行。若執(zhí)行語(yǔ)句含有多條語(yǔ)句要注意語(yǔ)句的排列順序其是順序執(zhí)行的。do.....while:格式do{...........}while(表達(dá)式);1.do......while主要用于人機(jī)交互,至少執(zhí)行一遍while和for可能一遍都不執(zhí)行。選擇switch格式#includestdio.h int main(void) { int val; printf(請(qǐng)輸入樓層); scanf(%d,val); switch (val) { case 1: printf(1層開(kāi)); break; case 2: printf(1層開(kāi)); break; default: printf(還沒(méi)有); break; } return 0; }1. 在switch中case、default是程序的入口然后順序執(zhí)行break是程序的出口 。2.所有case后面的常量表達(dá)式只能是枚舉常量、數(shù)值常量、字符常量、常變量或宏名中的一種注意普通變量和枚舉變量是不能作為case后面的常量表達(dá)式使用的。3.switch后邊括號(hào)里的表達(dá)式可以使任何類(lèi)型。4.break的用法用在循環(huán)中則是用來(lái)終止循環(huán)。用于switch則是用來(lái)終止switch終止距離最近的switch。不能直接用于if除非if屬于循環(huán)內(nèi)部的一個(gè)子句。在循環(huán)中if后面的break是用來(lái)終止循環(huán)的不是用來(lái)終止if的。在多層循環(huán)中break只能終止距離他最近的循環(huán)。5.continue的用法#includestdio.h int main(void) { int i; char ch; scanf(%d,i); printf(i %d\n,i); while ((chgetchar()) ! \n) continue; //只有檢測(cè)到輸入為換行符時(shí)才執(zhí)行continue之后的指令 int j; //功能可以檢查非法輸入 scanf(%d,j); //例輸入1 da dasd\n 輸出1 da dasd printf(j %d\n,j); //只有在輸入\n后才會(huì)輸出正確的輸入字符 return 0; }主要用在循環(huán)語(yǔ)句中當(dāng)執(zhí)行到continue時(shí)跳過(guò)在本次循環(huán)中continue后面的程序直接去判斷下一次循環(huán)條件是否滿足。數(shù)組數(shù)組的定義int i[5] {1,2,3,4,5}; //定義長(zhǎng)度為5的數(shù)組完全初始化 int i[5] {1,2,3,}; //未完全初始化未初始化的位為0int i[5] ; //未初始化所有位是垃圾值int i[5] {0}; //清零數(shù)組的作用為n個(gè)變量連續(xù)分配存儲(chǔ)空間所有變量數(shù)據(jù)類(lèi)型必須相同。為了解決大量同類(lèi)型數(shù)據(jù)的存儲(chǔ)和使用問(wèn)題 為了模擬現(xiàn)實(shí)世界。一維數(shù)組一維數(shù)組的名稱是變量名其保存數(shù)組第一位數(shù)據(jù)i[0]的地址。只有在定義數(shù)組時(shí)才能整體賦值其他情況下整體賦值都是錯(cuò)誤的。二維數(shù)組 定義int a[2][3]; //二行三列a[0][0]、a[0][1]....... 二維數(shù)組將其內(nèi)容輸出通過(guò)兩個(gè)for循環(huán)。#includestdio.h int main(void) { int a[3][4] { //初始化數(shù)組 {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; int i,j; /* int a[3][4] {1,2,3,4,5,6,7,8,9,10,11,12}; //初始化數(shù)組 */ //輸出數(shù)組內(nèi)容 for(i0;i3;i) { for(j0;j4;j) printf(%-5d\n,a[i][j]); //5表示每個(gè)字符占五個(gè)位置-號(hào)表示左對(duì)齊 printf(\n); } return 0; }多維數(shù)組多維數(shù)組不存在多維數(shù)組因?yàn)閮?nèi)存是線性一維的n維數(shù)組可以當(dāng)作每個(gè)元素是n-1維數(shù)組的一維數(shù)組。注把數(shù)組a中的值全部賦給數(shù)組b正確寫(xiě)法;for(i0;i5;i)b[i] a[i];補(bǔ)充:sizeof(arr)arr雖然數(shù)組名保存的是數(shù)組首元素的地址但上述兩種操作判斷的是整個(gè)數(shù)組的大小、取的是整個(gè)數(shù)組的地址而不是首元素的大小、首元素的地址對(duì)于數(shù)組前對(duì)于數(shù)組類(lèi)型的定義定義的是數(shù)組中每個(gè)元素的類(lèi)型同樣定義了每個(gè)元素的大小int (*p)[10] arrp是數(shù)組指針也叫 “指向數(shù)組的指針”p保存的是數(shù)組的地址寫(xiě)[10]是為了明確指針指向的是有10個(gè)元素的數(shù)組由于arr是數(shù)組地址如果寫(xiě) int *p arr 會(huì)報(bào) 類(lèi)型不匹配函數(shù)指針數(shù)組/* Add,Mul,Sub,Div是四個(gè)函數(shù) */int (*pf)(int,int) Add; //pf是函數(shù)指針int (*arr[4])(int,int) {Add,Mul,Sub,Div}; //arr是函數(shù)指針數(shù)組函數(shù)指針數(shù)組的使用ret arr[input](x,y); //對(duì)于功能繁多的情況使用case語(yǔ)句繁雜其不易維護(hù)就可以使用函數(shù)指針數(shù)組掉用不同的功能柔性數(shù)組在結(jié)構(gòu)體的最后一個(gè)成員時(shí)未明確大小的數(shù)組struct S { int n; int arr[]; } int main() { /* 柔性數(shù)組的使用 */ struct S* ps (struct S*)malloc(sizeof(struct S) 40); //結(jié)構(gòu)體的大小只有4字節(jié) ps-n 100; int i 0; for(i 0; i 10; i) { ps-arr[i] i; } for(i 0; i 10; i) { printf(%d,ps-arr[i]); } struct S* ptr (struct S)relloc(ps,sizeof(struct S) 80); if(ptr ! NULL) ( ps ptr; //此時(shí)ps與ptr都指向relloc分配的空間地址 ptr NULL; //賦值為空防止誤操作ptr使得ps變成野指針 ) //釋放 free(ps); ps NULL; return 0; }函數(shù)函數(shù)定義void max(int i, int j)}函數(shù)的執(zhí)行體 {void表示函數(shù)沒(méi)有返回值max是函數(shù)名稱括號(hào)()內(nèi)是形參列表 。int f(void) //void表示函數(shù)f不能接收數(shù)據(jù)int是函數(shù)返回值的類(lèi)型。 { return 10; //向主調(diào)函數(shù)返回10 } void g(void) //函數(shù)名前面的void表示函數(shù)沒(méi)有返回值 { //return 10; //如果寫(xiě)了返回值就會(huì)報(bào)錯(cuò) }注在使用函數(shù)時(shí)會(huì)為形參變量分配空間當(dāng)函數(shù)執(zhí)行完后該空間會(huì)被釋放在下一次使用該函數(shù)時(shí)會(huì)為形參變量分配新的存儲(chǔ)空間且分配的不一定是同一個(gè)空間。但程序是從main函數(shù)進(jìn)入的也是從main函數(shù)退出的。函數(shù)返回值的類(lèi)型也稱為函數(shù)的類(lèi)型因?yàn)槿绻瘮?shù)名前的返回值類(lèi)型與函數(shù)執(zhí)行體中的return 表達(dá)式中表達(dá)式的類(lèi)型不同的話則最終函數(shù)返回值的類(lèi)型以函數(shù)名前的返回值類(lèi)型為準(zhǔn)。實(shí)參與形參形參是函數(shù)定義時(shí)的參數(shù)用于接收實(shí)參的值在函數(shù)內(nèi)部使用。實(shí)參是函數(shù)調(diào)用時(shí)傳遞的實(shí)際值用于初始化形參需要確切的數(shù)據(jù)。函數(shù)的形參函數(shù)的形參在函數(shù)執(zhí)行結(jié)束后就被銷(xiāo)毀了return使用格式return 表達(dá)式;作用函數(shù)中的return是用來(lái)終止被調(diào)函數(shù)并向主調(diào)函數(shù)返回表達(dá)式的值如果表達(dá)式為空則只終止函數(shù)不向被調(diào)函數(shù)返回任何值。與break是用來(lái)終止循環(huán)不同。需要在main函數(shù)中調(diào)用的函數(shù)要寫(xiě)在main函數(shù)的前面順序執(zhí)行。main函數(shù)下可以調(diào)用其他函數(shù)但其他函數(shù)不能調(diào)用main函數(shù)可在main函數(shù)前添加函數(shù)聲明就能將函數(shù)寫(xiě)在main函數(shù)的后面。函數(shù)聲明格式void f(void); //函數(shù)聲明是一個(gè)語(yǔ)句要加分號(hào)函數(shù)的功能設(shè)計(jì)要單一才能提高復(fù)用率而不是設(shè)計(jì)的十分復(fù)雜。函數(shù)中傳遞一維數(shù)組參數(shù)需要傳遞數(shù)組名稱和元素個(gè)數(shù)。但字符數(shù)組不需要傳元素個(gè)數(shù)。//數(shù)組傳參 //函數(shù)傳遞數(shù)組求和 #include stdio.h int array_sum(int * data,int n); int main(int argc,char *argv[]) { int a[] {5,9,10,3,10}; int sum 0; sum array_sum(a,sizeof(a)/sizeof(int));//傳遞數(shù)組就必須要傳起始地址a和元素個(gè)數(shù)n reyurn 0; } int array_sum(int * data,int n)//int * data a;就是一個(gè)指針接收了數(shù)組名 { int ret 0; int i; for(i0;in;i) ret data[i]; return ret; }//字符數(shù)組傳參 //函數(shù)字符數(shù)組傳參不需要傳元素個(gè)數(shù)因?yàn)樽址麛?shù)組有\(zhòng)0判斷結(jié)束 includestido.h int main(int argc,char *argv[]) { char s[] h a sdg k; puts(s); del_space(s); puts(s); return 0; } void del_space(char * s1) { char * s2; s2 s1; //一個(gè)指針用來(lái)處理一個(gè)指針用來(lái)賦值 while (*s1){ if(*s1 ){ s1; } else{ *s2 *s1; s1; s2; } *s2 \0;//補(bǔ)充\0標(biāo)志字符串結(jié)束 } }指針函數(shù)指針函數(shù)是指一個(gè)函數(shù)的返回值為地址量的函數(shù)。結(jié)構(gòu)數(shù)據(jù)類(lèi)型*函數(shù)名稱(參數(shù)說(shuō)明){語(yǔ)句序列;}錯(cuò)誤示例#includestdio.h #includestring.h char * mystring(){ char str[20]; strcpy(str,hello); return str; //返回值是指針 } int main(void) { printf(%s\n,mystring()); //打印函數(shù)返回值 return 0; }由于函數(shù)執(zhí)行完成后對(duì)應(yīng)內(nèi)存已經(jīng)釋放所以編譯錯(cuò)誤。只有當(dāng)返回值為全局變量的地址、static變量地址、字符串常量的地址或使用malloc函數(shù)申請(qǐng)存儲(chǔ)空間。遞歸遞歸函數(shù)指一個(gè)函數(shù)體中直接或間接調(diào)用了該函數(shù)本身。//階乘計(jì)算 #includestdio.h int fac(int n); int main(int argc,char *argv[]) { int n; printf(input); scanf(%d,n); return 0; } int fac(int n) { if(n 0 || n 1) return 1; return n * fac(n-1);//在函數(shù)中調(diào)用了該函數(shù) }棧一個(gè)端口既是出口也是入口。補(bǔ)充對(duì)于函數(shù)參數(shù)的設(shè)計(jì)函數(shù)參數(shù)的設(shè)計(jì)取決于要傳入的是什么就是說(shuō)形參與實(shí)參的類(lèi)型要匹配假設(shè)要傳入一個(gè)一級(jí)指針那就需要將參數(shù)定義為一級(jí)指針類(lèi)型函數(shù)指針指向函數(shù)的指針數(shù)組指針指向數(shù)組的指針指針數(shù)組數(shù)組成員是指針的數(shù)組回調(diào)函數(shù)通過(guò)函數(shù)指針在適當(dāng)是調(diào)用他所指向的函數(shù)變量函數(shù)內(nèi)定義的變量是局部變量所有函數(shù)外定義的變量是全局變量。在一個(gè)函數(shù)內(nèi)部如果定義的局部變量的名字和全局變量名一樣時(shí)局部變量會(huì)屏蔽掉全局變量。static變量1. 存儲(chǔ)位置固定靜態(tài)變量存放在程序的數(shù)據(jù)段已初始化的靜態(tài)變量或者 BSS 段未初始化的靜態(tài)變量并非?;蚨?。這使得它的內(nèi)存地址在程序運(yùn)行期間保持不變。2. 延長(zhǎng)生命周期靜態(tài)變量的生命周期和程序的運(yùn)行周期一樣長(zhǎng)。就算定義它的函數(shù)執(zhí)行完畢其值也不會(huì)被銷(xiāo)毀下次調(diào)用該函數(shù)時(shí)靜態(tài)變量會(huì)使用上次保存的值。3. 僅初始化一次靜態(tài)變量在程序加載時(shí)就完成初始化而非每次函數(shù)調(diào)用時(shí)都初始化。如果沒(méi)有顯式初始化它會(huì)被自動(dòng)初始化為 0對(duì)于數(shù)值類(lèi)型或者 NULL對(duì)于指針類(lèi)型。指針1指針的含義#include stdio.h int main(void) { int *p; int i; p i; /* p保存了i的地址因此p指向i p不是ii也不是p更準(zhǔn)確的說(shuō)修改p的值不會(huì)影響i修改i的值也不會(huì)影響p */ return 0; }指針的本質(zhì)是操作受限的非負(fù)整數(shù)不能進(jìn)行加、減、乘、除等操作。p是變量的名字int *表示p變量存放的是int類(lèi)型變量的地址。也就是說(shuō)只有整形變量的地址才能存入變量p。p是變量名p變量的數(shù)據(jù)類(lèi)型是int*類(lèi)型而*p是int類(lèi)型也就是指針?biāo)赶虻膬?nèi)容的數(shù)據(jù)類(lèi)型是整型。*p 就是以p的內(nèi)容為地址的變量*p和取地址是逆運(yùn)算。指針就是地址地址就是指針指針變量是存放地址的變量。如果一個(gè)指針變量指向了某個(gè)普通變量則*指針變量就完全等同于普通變量。地址就是內(nèi)存單元的編號(hào)。p指的是所指變量的地址*p指的是該地址下的內(nèi)容。匯編中的的概念給地址加括號(hào)表示該地址的內(nèi)容。例DPTR 1000H,DPTR 1230H 變量p存放的是地址*p存放的是該地址下的數(shù)據(jù)。在 C 語(yǔ)言里聲明指針時(shí)不會(huì)自動(dòng)為其分配內(nèi)存地址。要是直接使用未初始化的指針?biāo)闹凳请S機(jī)的這就會(huì)讓指針指向內(nèi)存中一個(gè)不確定的位置。在其他函數(shù)中定義的二級(jí)指針能跨函數(shù)修改變量的值是因?yàn)槎?jí)指針存放的是地址而不是變量?jī)?nèi)容 。/* 數(shù)字交換程序 */ includestdio.h void exchange(int *p,int * q) { int t; //注意t必須定義為int類(lèi)型 t *p; *p *q; *q t; } int main(void) { int a 3; int b 4; exchange(a,b); //exchang*p*q是錯(cuò)誤的exchangeab也是錯(cuò)誤的 printf(a %d, b %d/n,a,b); reeturn 0; }void類(lèi)型指針未定義指針類(lèi)型在使用時(shí)需要強(qiáng)制類(lèi)型轉(zhuǎn)換。const修飾指針情況一const 數(shù)據(jù)類(lèi)型*指針變量名稱[指針運(yùn)算表達(dá)式];常量化指針目標(biāo)是限制通過(guò)指針改變其目標(biāo)的數(shù)值但指針變量存儲(chǔ)的地址值可以修改。情況二數(shù)據(jù)類(lèi)型*const指針變量[指針運(yùn)算表達(dá)式];使得指針變量存儲(chǔ)的地址值不能修改。但是可以通過(guò)*指針變量名稱可以修改指針?biāo)赶虻淖兞康臄?shù)值。#includestdio.h int main(int argc,const char argv[]) { int m 10; const int * p; //情況一 int * const q m; //情況二 const int * const r m; p m; //right //(*p); //error //q m; //error *q 20; //right r; //error (*r); //error return 0; }*號(hào)的用法乘法、定義指針、指針運(yùn)算符a *p*p是以p的內(nèi)容為地址的變量。通過(guò)指針在被調(diào)函數(shù)中修改主調(diào)函數(shù)中的值例 *形參名 ........2指針常見(jiàn)的錯(cuò)誤# include stdio.h int main(void) { int i 5; int *p; int *q; p i; *q p; //錯(cuò)誤1類(lèi)型不匹配 錯(cuò)誤2沒(méi)有對(duì)q初始化 *q *p; //錯(cuò)誤q未初始化 p q; //q是垃圾值q賦給pp也變成了垃圾值 /* 在 C 語(yǔ)言里聲明指針時(shí)不會(huì)自動(dòng)為其分配內(nèi)存地址。要是直接使用未初始化的指 針?biāo)闹凳请S機(jī)的這就會(huì)讓指針指向內(nèi)存中一個(gè)不確定的位置。 本程序無(wú)法讀取*q的內(nèi)容得到原因指針q沒(méi)有被初始化它指向的是一個(gè)隨機(jī)的內(nèi) 存地址直接對(duì)其進(jìn)行解引用會(huì)導(dǎo)致未定義行為。 */ printf(%d\n,*q); return 0; }3指針和數(shù)組指針和一維數(shù)組一維數(shù)組名是一個(gè)指針常量不能做賦值操作存放的是第一個(gè)元素的地址。確定一個(gè)一維數(shù)組只需要數(shù)組第一個(gè)元素的地址和數(shù)組長(zhǎng)度。#include stdio.h void f(int * pArr, int len) { pArr[3] 88; //改變的是數(shù)組第四個(gè)元素的值 } int main(void) { int a[6] {1,2,3,4,5,6,}; printf(%d\n,a[3]) f(a,6) //將數(shù)組a的首地址傳遞給函數(shù)f確定一個(gè)數(shù) //組或?qū)?shù)組進(jìn)行操作只需要數(shù)組的首地址和數(shù)組長(zhǎng)度 printf(%d/n,a[3]) return 0; } 輸出結(jié)果 --------------------------------- 4 88 ---------------------------------下標(biāo)和指針的關(guān)系如果p是一個(gè)指針變量則 p[i] 永遠(yuǎn)等價(jià)于 *p i。*p i的含義取出pi地址中的內(nèi)容。指針變量運(yùn)算指針變量不能相加、相乘、相除。只能相減 如果兩個(gè)指針變量指向的是同一塊連續(xù)空間中不同的存儲(chǔ)單元?jiǎng)t這兩個(gè)指針變量才能相減。 例如一個(gè)數(shù)組中不同元素的地址。一個(gè)變量的地址使用該變量首字節(jié)的地址表示。無(wú)論他指向的變量占幾個(gè)字節(jié)每個(gè)指針變量只占用四個(gè)字節(jié)。因?yàn)闊o(wú)論指針變量保存的地址有多大都需要32位地址線來(lái)表示(324*8)。對(duì)于硬件地址每一個(gè)字節(jié)一個(gè)編號(hào)。例如double類(lèi)型的變量i占8個(gè)字節(jié)那么i保存的是第一個(gè)字節(jié)的地址。一個(gè)變量的地址使用該變量首字節(jié)的地址表示4動(dòng)態(tài)內(nèi)存分配靜態(tài)數(shù)組的缺點(diǎn)1.數(shù)組的長(zhǎng)度必須提前制定且定義的長(zhǎng)度只能是常數(shù)。int a[5]; //okint len 5; int a[len]; //error2.傳統(tǒng)形式定義的數(shù)組該數(shù)組的內(nèi)存程序員無(wú)法手動(dòng)釋放。函數(shù)中定義的數(shù)組只有在函數(shù)運(yùn)行完之后系統(tǒng)分配個(gè)數(shù)組的內(nèi)存空間才會(huì)被釋放。3.數(shù)組的長(zhǎng)度不能在函數(shù)運(yùn)行的過(guò)程中動(dòng)態(tài)的擴(kuò)充或縮小。4.A函數(shù)定義的數(shù)組在A函數(shù)運(yùn)行期間可以被其他函數(shù)使用但A函數(shù)運(yùn)行結(jié)束之后由于數(shù)組A的內(nèi)存已經(jīng)釋放了所有A函數(shù)中的數(shù)組就不能被其他函數(shù)使用了。為什么需要?jiǎng)討B(tài)分配內(nèi)存原因就是解決了上面的四個(gè)缺陷。//動(dòng)態(tài)分配函數(shù)malloc的用法1 #include stdio.h #include malloc.h int main(void) { int i 5; //i是靜態(tài)分配的 int * p (int*)malloc(4); //a行需對(duì)函數(shù)返回值強(qiáng)制類(lèi)型轉(zhuǎn)換才能確定有幾個(gè)變量由于 //int類(lèi)型變量占4個(gè)字節(jié)所有該行動(dòng)態(tài)分配了1個(gè)變量 /* 1.要使用malloc這個(gè)函數(shù)要添加對(duì)應(yīng)頭文件 2.malloc函數(shù)只有一個(gè)形參并且形參是整數(shù) 3.4表示請(qǐng)求系統(tǒng)為本程序分配4個(gè)字節(jié) 4.malloc函數(shù)只能返回第一個(gè)字節(jié)的地址 5.a行分配了8個(gè)字節(jié)p變量占4個(gè)字節(jié)p所指向的內(nèi)存也占4個(gè)字節(jié) 6.p本身所占的內(nèi)存是靜態(tài)分配的p所指向的內(nèi)存是動(dòng)態(tài)分配的 */ free(p);//由程序員手動(dòng)釋放掉p所指向的動(dòng)態(tài)內(nèi)存 //而p所占用的內(nèi)存只能在所在函數(shù)運(yùn)行終止時(shí)由系統(tǒng)釋放 return 0; }/* malloc函數(shù)用法2:在一個(gè)函數(shù)中動(dòng)態(tài)分配的內(nèi)存在另一個(gè)函數(shù)中進(jìn)行處理 */ # include stdio.h # include malloc.h void f(int * q) { *q 200; } int main(void) { int * p (int*)malloc(sizeof(int)); *p 10; printf(%d\n,*p); f(p); printf(%d,*p); return 0; }動(dòng)態(tài)數(shù)組的構(gòu)造#include stdio.h #include malloc.h int main(void) { int len; int *pArr; int i; //動(dòng)態(tài)構(gòu)造一維數(shù)組 printf(請(qǐng)輸入你要存放的元素的個(gè)數(shù):) scanf%dlen pArr int*malloc4 * len //數(shù)組的每個(gè)元素都是int類(lèi)型。 //也可以寫(xiě)成pArr[i]的形式使用 //對(duì)一維數(shù)組進(jìn)行操作 for(i0;ilen;i) scanf(%d\n,pArr[i]); //對(duì)一維數(shù)組進(jìn)行輸出 printf(一維數(shù)組輸出的內(nèi)容時(shí)\n) for(i0;ilen;i) printf(%d\n,pArr[i]) free(pArr);//釋放掉動(dòng)態(tài)分配的數(shù)組 return 0; }靜態(tài)內(nèi)存與動(dòng)態(tài)內(nèi)存的區(qū)別補(bǔ)充malloc和freevoid* malloc(size_t size);1.如果開(kāi)辟成功則返回一個(gè)指向開(kāi)辟空間的指針2.如果開(kāi)辟失敗則返回一個(gè)NULL指針因此返回值一定要檢查; if(p NULL){}3.返回值的類(lèi)型是void*所以malloc函數(shù)并不知道開(kāi)辟空間的類(lèi)型具體在使用的時(shí)候使用者自己決定強(qiáng)制類(lèi)型轉(zhuǎn)換4.如果size為0malloc的行為是標(biāo)準(zhǔn)的是未定義的取決于編譯器內(nèi)存開(kāi)辟int* p malloc(40); //在堆區(qū)開(kāi)辟40字節(jié)大小的內(nèi)存內(nèi)存釋放free(p);p NULL; //釋放內(nèi)存后p仍然保存了原地址為防止內(nèi)存泄露為p賦值NULLcalloc函數(shù)void* calloc(size_t num, size_t size);1.num是創(chuàng)建元素個(gè)數(shù) size每個(gè)元素的大小2.相比于malloccalloc會(huì)將開(kāi)辟的每個(gè)字節(jié)都初始化為0relloc函數(shù)void* relloc(void* ptr, size_t size);1.ptr是要調(diào)整的內(nèi)存地址size是調(diào)整后的新大小2.返回值為調(diào)整之后的內(nèi)存的起始地址3.調(diào)整之后的內(nèi)存空間可能是在原來(lái)內(nèi)存空間的基礎(chǔ)上也可能是開(kāi)辟了一塊新的空間擴(kuò)充空間的兩種情況1原空間后有足夠大的空間滿足擴(kuò)充條件則由原空間加擴(kuò)充的部分構(gòu)成2原空間后空間不足就會(huì)開(kāi)辟一塊新的空間能夠容納擴(kuò)充后的大小動(dòng)態(tài)內(nèi)存分配中的常見(jiàn)錯(cuò)誤1.對(duì)于創(chuàng)建的動(dòng)態(tài)內(nèi)存要檢驗(yàn)其返回值是否為空再對(duì)其進(jìn)行解引用操作2.不能對(duì)動(dòng)態(tài)分配的空間越界訪問(wèn)3.對(duì)非動(dòng)態(tài)開(kāi)辟的空間使用free釋放4.由于程序?qū)⒍褏^(qū)地址跑丟了使用free釋放一塊動(dòng)態(tài)開(kāi)辟內(nèi)存的一部分可以定義中間變量保存動(dòng)態(tài)內(nèi)存的起始地址在釋放時(shí)傳中間變量給free()或者寫(xiě)成 p[i]*(pi) p是動(dòng)態(tài)內(nèi)存分配函數(shù)的返回值5.對(duì)同一塊動(dòng)態(tài)內(nèi)存多次free因?yàn)樵诘谝淮蝔ree后函數(shù)的返回值依然記著所釋放內(nèi)存的地址所以要在ferr后對(duì)返回值賦值NULL6.動(dòng)態(tài)開(kāi)辟的內(nèi)存空間忘記釋放內(nèi)存泄露開(kāi)辟了空間但是不使用導(dǎo)致該進(jìn)程中該地址空間不能被使用只有進(jìn)程結(jié)束后才會(huì)被系統(tǒng)回收相當(dāng)于內(nèi)存泄露了比如1在開(kāi)辟內(nèi)存命令和釋放內(nèi)存命令之間存在return命令可能出現(xiàn)沒(méi)有機(jī)會(huì)執(zhí)行free命令的情況2內(nèi)存開(kāi)辟在一個(gè)函數(shù)中進(jìn)行但釋放命令交給了其他函數(shù)忘記寫(xiě)釋放命令/* 程序崩潰 */ void GetMemory(char* p) { p (char*)malloc(100); //存在內(nèi)存泄露p是形參函數(shù)結(jié)束后就被銷(xiāo)毀了所以p指向的動(dòng)態(tài)分配空間在該函數(shù)執(zhí)行完成后就找不到了 } void Test(void) { char* str NULL; GetMemory(str); strcpy(str, hello world); //str依然是NULL解引用時(shí)崩潰 printf(str); //且該程序沒(méi)有free過(guò)程也存在問(wèn)題 } int main() { Test(); return 0; }(5)跨函數(shù)使用內(nèi)存問(wèn)題靜態(tài)內(nèi)存不能跨函數(shù)使用//靜態(tài)變量不能跨函數(shù)使用 #include stdio.h void f(int ** q) { int i 5; *q i; } int main(void) { int *p; f(p); printf(%d\n,*p);//該行語(yǔ)法沒(méi)問(wèn)題但是邏輯有問(wèn)題p可以保存i的地址但不能訪問(wèn)i的空間 //因?yàn)樵趂函數(shù)執(zhí)行完后i的空間就被釋放了不能讀也不能寫(xiě) return 0; }動(dòng)態(tài)內(nèi)存可以跨函數(shù)使用/* 動(dòng)態(tài)內(nèi)存分配 靜態(tài)內(nèi)存在棧里面分配動(dòng)態(tài)內(nèi)存在堆里面分配 */ #include stdio.h #include malloc.h void f(int * q) { *q (int *)malloc(sizeof(int)); **q 5; //等價(jià)于pint*mallocsizeofint } int main(void) { int * p; f(p); printf(%d\n,*p);//由于在f函數(shù)中沒(méi)有手動(dòng)釋放內(nèi)存命令 //所有該內(nèi)存在執(zhí)行完f函數(shù)后任然存在所有該行語(yǔ)句正確 return 0; }定義的靜態(tài)變量在其內(nèi)存被釋放之后就不能再在其他函數(shù)中被調(diào)用了。不直接寫(xiě)數(shù)字是為了在不同設(shè)備上定義正確的字節(jié)數(shù)。函數(shù)sizeof返回變量類(lèi)型的字節(jié)數(shù)。動(dòng)態(tài)分配是在堆中分配地址。而靜態(tài)分配是在棧中分配地址運(yùn)行結(jié)束后就會(huì)出棧就釋放了所有就不能跨函數(shù)調(diào)用。malloc函數(shù)就是通過(guò)定義二級(jí)指針的方式實(shí)現(xiàn)跨函數(shù)修改變量的目的。二級(jí)指針的核心作用是允許函數(shù)修改一級(jí)指針的值。如果只是用一級(jí)指針指向另一個(gè)一級(jí)指針類(lèi)型不匹配而且無(wú)法實(shí)現(xiàn)修改實(shí)參指針這樣的功能。…………………………………………………………………………………………第二段代碼里不是“普通變量能在main里賦值”——普通變量 p 、 q 只是“持地址的工具人”真正被跨函數(shù)賦值、修改的是 malloc 申請(qǐng)的堆內(nèi)存它不受函數(shù)生命周期限制只要有有效地址就能操作。普通變量棧區(qū)本身依然不能跨函數(shù)賦值比如 f 里改 q 的值 main 里的 p 不會(huì)變。指針指向的內(nèi)存“無(wú)效”要么被釋放、要么根本沒(méi)分配過(guò)此時(shí)通過(guò)指針操作內(nèi)存讀/寫(xiě)就是非法的野指針操作。核心答案一句話說(shuō)透內(nèi)存是否釋放和“哪個(gè)函數(shù)分配”無(wú)關(guān)只看“內(nèi)存存放在棧區(qū)還是堆區(qū)”——棧區(qū)內(nèi)存隨函數(shù)結(jié)束自動(dòng)釋放堆區(qū)內(nèi)存必須手動(dòng)free才釋放。一、先明確兩個(gè)關(guān)鍵前提嵌入式開(kāi)發(fā)必記1. C語(yǔ)言中局部變量的“存放區(qū)域”由 定義方式 決定不是“哪個(gè)函數(shù)定義”決定- 普通局部變量比如 int i 5; 默認(rèn)存 棧區(qū)函數(shù)專(zhuān)屬內(nèi)存輕量、自動(dòng)管理。- malloc 申請(qǐng)的內(nèi)存比如 int *p (int*)malloc(...) 存 堆區(qū)全局共享內(nèi)存重量級(jí)、手動(dòng)管理。2. 函數(shù)調(diào)用的本質(zhì)只是“執(zhí)行代碼邏輯”不會(huì)改變內(nèi)存的“區(qū)域?qū)傩浴薄獥^(qū)內(nèi)存不會(huì)因?yàn)樵谄渌瘮?shù)中被訪問(wèn)就變成堆區(qū)堆區(qū)內(nèi)存也不會(huì)因?yàn)楹瘮?shù)結(jié)束就自動(dòng)變成棧區(qū)。二、兩段代碼的內(nèi)存差異拆解對(duì)應(yīng)你的疑問(wèn)我們分別看“f函數(shù)中的i”和“malloc申請(qǐng)的內(nèi)存”的生命周期1. 第一段代碼f函數(shù)里的 int i 5; - i 的定義 f 函數(shù)內(nèi)的 普通局部變量 → 存棧區(qū)。- 內(nèi)存生命周期- 進(jìn)入 f 函數(shù)時(shí)系統(tǒng)在棧區(qū)給 i 分配空間存5- 退出 f 函數(shù)時(shí)棧區(qū)的核心規(guī)則是“函數(shù)結(jié)束自動(dòng)回收內(nèi)部所有局部變量的內(nèi)存”——不管 main 函數(shù)的指針 p 是否還存著 i 的地址 i 的棧內(nèi)存已經(jīng)被系統(tǒng)標(biāo)記為“可復(fù)用”后續(xù)訪問(wèn)就是非法的“野指針操作”。- 關(guān)鍵 i 是棧區(qū)變量所以 f 函數(shù)結(jié)束就釋放和“有沒(méi)有被其他函數(shù)的指針指向”無(wú)關(guān)。2. 第二段代碼main里 malloc 的內(nèi)存- 內(nèi)存的定義 main 函數(shù)中用 malloc 申請(qǐng) → 存堆區(qū)。- 內(nèi)存生命周期- malloc 執(zhí)行時(shí)系統(tǒng)在堆區(qū)分配一塊 int 大小的空間返回地址給 p - 調(diào)用 f(p) 時(shí)只是把“堆區(qū)地址”傳給 f 的 q q 和 p 指向 同一塊堆內(nèi)存—— f 函數(shù)里的 *q 200 本質(zhì)是修改“堆區(qū)內(nèi)存的值”不是修改“內(nèi)存的存放區(qū)域”- 退出 f 函數(shù)時(shí) f 的局部變量 q 棧區(qū)指針會(huì)被回收但它指向的 堆內(nèi)存沒(méi)動(dòng)堆區(qū)內(nèi)存的回收只認(rèn) free 不認(rèn)函數(shù)結(jié)束- 回到 main 后 p 依然指向這塊堆內(nèi)存所以能正常訪問(wèn)修改后的值200直到手動(dòng) free(p) 才釋放。- 關(guān)鍵 malloc 的內(nèi)存是堆區(qū)變量所以 f 函數(shù)結(jié)束不會(huì)釋放和“在main里分配、f里訪問(wèn)”無(wú)關(guān)。三、一句話總結(jié)核心區(qū)別簡(jiǎn)單說(shuō)棧區(qū)內(nèi)存“跟函數(shù)走”函數(shù)沒(méi)了內(nèi)存就沒(méi)堆區(qū)內(nèi)存“跟程序員走”你不釋放它就一直在——這也是嵌入式開(kāi)發(fā)中處理緩沖區(qū)、數(shù)據(jù)結(jié)構(gòu)時(shí)優(yōu)先用 malloc 需注意內(nèi)存泄漏的原因?!簿褪钦f(shuō)無(wú)論是在哪里定義的什么類(lèi)型的變量操作邏輯都是針對(duì)內(nèi)存空間來(lái)說(shuō)的只需要看內(nèi)存空間的地址和地址下所存儲(chǔ)的內(nèi)容。變量只是內(nèi)存空間的“別名”或“標(biāo)識(shí)”所有對(duì)變量的操作本質(zhì)都是通過(guò)“變量關(guān)聯(lián)的內(nèi)存地址”去讀寫(xiě)這塊地址里的內(nèi)容變量是給人看的“標(biāo)識(shí)”內(nèi)存地址和內(nèi)容才是給計(jì)算機(jī)執(zhí)行的“本質(zhì)”——所有代碼邏輯最終都會(huì)落地到“哪個(gè)地址、存什么內(nèi)容”的操作上。6函數(shù)指針定義數(shù)據(jù)類(lèi)型*函數(shù)指針名稱[大小](說(shuō)明列表)其中大小是指函數(shù)指針數(shù)組元素的個(gè)數(shù)#includestdio.h //生成函數(shù) int add(int a,int b) { return ab; } int main(int argc, char *argv[]) { int m 10,n 20; int (*p)(int,int); //函數(shù)聲明 p[0] add; //指針p指向函數(shù)add printf(%d\n,(*p)(m,n)); //函數(shù)調(diào)用 //p[1] sub; return 0; }補(bǔ)充定義指針的類(lèi)型是指指針?biāo)赶虻膬?nèi)容的類(lèi)型比如char *p指的是p指向的內(nèi)容是char類(lèi)型函數(shù)指針指向函數(shù)的指針數(shù)組指針指向數(shù)組的指針指針數(shù)組數(shù)組成員是指針的數(shù)組函數(shù)指針在代碼重復(fù)的部分其中只有一個(gè)函數(shù)不一樣就可以采取封裝一個(gè)函數(shù)這個(gè)函數(shù)的形參是函數(shù)指針類(lèi)型指向冗余代碼中的不同函數(shù)無(wú)具體類(lèi)型的指針void* pa a;/* void*表示無(wú)具體類(lèi)型的指針可以接受任意類(lèi)型的地址由于其是無(wú)具體類(lèi)型 的指針?biāo)胁荒芙庖猛ㄟ^(guò)指針變量訪問(wèn)其指向的內(nèi)存地址中存儲(chǔ)的值操作也不能-整數(shù)需要強(qiáng)制類(lèi)型轉(zhuǎn)換后在操作 */指針的初始化對(duì)于未初始化的指針定義該指針可能指向任何位置可能是程序的其他數(shù)據(jù)、代碼區(qū)甚至是受保護(hù)的內(nèi)存此時(shí)解引用會(huì)導(dǎo)致程序崩潰結(jié)構(gòu)體定義賦值結(jié)構(gòu)體#include stdio.h struct student //這只是定義了一個(gè)數(shù)據(jù)類(lèi)型并沒(méi)有定義變量 { int age; float score; char name; } //結(jié)構(gòu)體定義賦值 int main(void) { //方式一 struct student st {15, 84, JIM}; //st是變量名定義的同時(shí)賦初值。 struct student st2; st2.age 15; //賦值 st2.score 84; st2.name JIM; //方式二 struct student *pst st; //將普通變量st的地址保存到pst pst-age 15; //賦值 return 0; }pst - age 88.8f; //方式二/指針變量名- 成員名 在計(jì)算機(jī)內(nèi)部會(huì)被轉(zhuǎn)化成(*pst).age也等價(jià)于st.age。88.8默認(rèn)為double類(lèi)型在末尾加f可轉(zhuǎn)換成float類(lèi)型且浮點(diǎn)數(shù)不能準(zhǔn)確存儲(chǔ)。通過(guò)函數(shù)讀結(jié)構(gòu)體進(jìn)行輸入和輸出int main(void) { struct Student st; //st為struct Student類(lèi)型變量名用來(lái)保存該結(jié)構(gòu)體的數(shù)據(jù) InputStudent(st); //對(duì)結(jié)構(gòu)體變量輸入必須發(fā)送st的地址 OutputStudent(st); //對(duì)結(jié)構(gòu)體變量輸出可以發(fā)送st的地址也可以發(fā)送st的內(nèi)容 // OutputStudent(st); return 0; } //輸出函數(shù)參數(shù)名為ss void OutputStudent(struct Student ss) { printf(%d %c %s\n , ss.age, ss.sex, ss.name); } //輸入函數(shù)參數(shù)名為pstu void InputStudent(struct Student * pstu) //pstu只占四個(gè)字節(jié),*前面的是指針的 //類(lèi)型用來(lái)確定該指針占多少字節(jié) { (*pstu).age 10; //等于st.age strcpy(pstu-name,張三); pstu-sex F; }雖然發(fā)送地址可能會(huì)造成內(nèi)容誤改寫(xiě)但是如果發(fā)送的是內(nèi)容占用的內(nèi)存太大而如果發(fā)送地址占用內(nèi)存少執(zhí)行速度快。所以推薦發(fā)送地址。結(jié)構(gòu)體變量的運(yùn)算:結(jié)構(gòu)體變量不能相加不能相減也不能相乘除只能相互賦值。補(bǔ)充結(jié)構(gòu)體對(duì)齊:對(duì)齊規(guī)則1.第一個(gè)結(jié)構(gòu)體成員在與結(jié)構(gòu)體變量偏移為0的地址處2.其他成員要對(duì)齊到該成員數(shù)據(jù)類(lèi)型大小的整數(shù)倍地址處對(duì)齊數(shù) 編譯器默認(rèn)對(duì)齊數(shù)與該成員數(shù)據(jù)類(lèi)型大小相比中的較小值3.結(jié)構(gòu)體的總大小為最大對(duì)齊數(shù)的整數(shù)倍4.如果嵌套了結(jié)構(gòu)體嵌套的結(jié)構(gòu)體對(duì)齊到自己最大對(duì)齊數(shù)的整數(shù)倍外層結(jié)構(gòu)體的大小依然是最大對(duì)齊數(shù)的整數(shù)倍含嵌套結(jié)構(gòu)體的對(duì)齊數(shù)原因1.方便不同硬件平臺(tái)訪問(wèn)數(shù)據(jù)讀/寫(xiě)2.提高訪問(wèn)數(shù)據(jù)的速度用空間換時(shí)間對(duì)齊只需要訪問(wèn)一次但是不對(duì)齊可能出現(xiàn)一次訪問(wèn)沒(méi)有訪問(wèn)到全部的數(shù)據(jù)對(duì)策讓占用小空間的成員經(jīng)量集中在一塊結(jié)構(gòu)體傳參要傳結(jié)構(gòu)體地址減小在傳值時(shí)壓棧的開(kāi)銷(xiāo)導(dǎo)致的性能下降枚舉把一個(gè)事物的所有取值的列舉出來(lái)。//這只是定義了一個(gè)數(shù)據(jù)類(lèi)型而不是一個(gè)變量,數(shù)據(jù)類(lèi)型的名字是enum WeekDay enum WeekDay { monday,tuesday,wednesday,........,sunday }; int main(void) { enum WeekDay day wednesday; //day是變量等號(hào)后面只能寫(xiě)類(lèi)型 //中的元素不能直接寫(xiě)數(shù)字 printf(%d\n,day); //輸出結(jié)果為2 return 0; } //本函數(shù)的目的只是期望接受0-6之間的數(shù)字將形參定義為枚舉類(lèi)型 void f(enum weekday i) { switch (i) { case 0:printf(monday\n); break; case 1:printf(tuesday\n); break; case 2:printf(wednesday\n); break; case 3:printf(thursday\n); break; .... } }定義為枚舉類(lèi)型可以保證傳輸?shù)亩际怯行畔⑹勾a更安全。聯(lián)合體成員共用同一段內(nèi)存空間那么聯(lián)合體的大小至少是最大成員的大小定義union un{char b,int c};//該聯(lián)合體中成員b、c的存儲(chǔ)起始地址是相同的所以也會(huì)出現(xiàn)數(shù)據(jù)覆蓋的情況補(bǔ)碼計(jì)算機(jī)內(nèi)的數(shù)據(jù)以補(bǔ)碼的形式存儲(chǔ)。二進(jìn)制轉(zhuǎn)十進(jìn)制先確定依據(jù)最高位確定正負(fù)若為負(fù)數(shù)將所有位取反再加1最后添加負(fù)號(hào)。十進(jìn)制轉(zhuǎn)二進(jìn)制正數(shù)的補(bǔ)碼:為其二進(jìn)制本身空余的位數(shù)補(bǔ)0。負(fù)數(shù)的補(bǔ)碼:其絕對(duì)值 的二進(jìn)制取反加1空余的位數(shù)全部補(bǔ)1。要補(bǔ)夠空余位數(shù)因?yàn)橄到y(tǒng)默認(rèn)補(bǔ)0。例-3的補(bǔ)碼是0xFFFFFFFDint類(lèi)型變量所存儲(chǔ)的最大正數(shù)用十六進(jìn)制表示0x7FFF_FFFFint類(lèi)型變量所存儲(chǔ)的絕對(duì)值最大負(fù)數(shù)用十六進(jìn)制表示0x8000_0000缺少符號(hào)位發(fā)生溢出ch中只保存了1個(gè)字節(jié)的數(shù)據(jù) char ch 0x80;//字符型變量占一個(gè)字節(jié) ch 129; //129占4個(gè)字節(jié) printf(%d\n,ch); //輸出結(jié)果為-127 0000_0000 0 0000_0001 1 ......... ... 0111_1111 127 1000_0000 -128 1000_0001 -127 ......... ... 1111_1111 -1鏈表鏈表的建立用結(jié)構(gòu)體和函數(shù)寫(xiě)鏈表先構(gòu)造一個(gè)頭結(jié)點(diǎn)再依次寫(xiě)所需的節(jié)點(diǎn)個(gè)數(shù)通過(guò)malloc函數(shù)構(gòu)造節(jié)點(diǎn)再將所構(gòu)造的節(jié)點(diǎn)插入到頭結(jié)點(diǎn)的后邊返回了頭結(jié)點(diǎn)的地址 。一個(gè)節(jié)點(diǎn)包括數(shù)據(jù)域和指針域兩部分。#includestdio.h #includemalloc.h #inncludestdlib.h //定義了一個(gè)鏈表節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型 struct Node { int data;//數(shù)據(jù)域 struct Node * pNext;//指針域遞歸 }; //函數(shù)聲明 struct Node * create_list(void); void traverse_list(struct Node *); int main(void) { struct Node * pHead NULL;//創(chuàng)建了一個(gè)struct Node類(lèi)型的指針用來(lái)存放頭節(jié)點(diǎn)的地址 pHead createlist();//CreateList()功能創(chuàng)建一個(gè)非循環(huán)單鏈表并將頭節(jié)點(diǎn)地址作為函數(shù)返回值 traverse_list(pHead);//遍歷鏈表元素 return 0; } //非循環(huán)單鏈表函數(shù) struct Node * creat_list(void) { int len;//用來(lái)存放有效節(jié)點(diǎn)個(gè)數(shù) int i; int val;//用來(lái)臨時(shí)存放用戶輸入的節(jié)點(diǎn)的值 //分配一個(gè)不存放有效數(shù)據(jù)的頭節(jié)點(diǎn) struct Node * pHead (struct Node *)malloc(sizeof(struct Node)); if(NULL pHead) { printf(分配失敗程序終止\n); exit(-1); } struct Node * pTail pHead; pTail-pHead NULL; printf(請(qǐng)輸入您要生成鏈表節(jié)點(diǎn)的個(gè)數(shù)len ); scanf(%d,len); for(i0;ilen;i) { printf(請(qǐng)輸入第%d個(gè)節(jié)點(diǎn)的值i1); scanf(%d,val); struct Node * pNew (struct Node *)malloc(sizeof(struct Node)); if(pNew NULL) { printf(分配失敗程序終止\n); exit(-1); } pNew-data val; pTail-pNext pNew; pNew-pNext NULL; pTail pNew; } return pHead;//返回值為頭節(jié)點(diǎn)的地址 //遍歷函數(shù) void traverse_list(struct Node * pHead) { struct Node * p pHead-pNext; while(NULL ! p) //鏈表不為空則執(zhí)行循環(huán) { printf(d\n,p-data); p p-pNext; } return; } }首節(jié)點(diǎn)存放第一個(gè)有效數(shù)據(jù)的節(jié)點(diǎn)。尾節(jié)點(diǎn)存放最后一個(gè)有效數(shù)據(jù)的節(jié)點(diǎn)。頭結(jié)點(diǎn)頭結(jié)點(diǎn)和首節(jié)點(diǎn)的數(shù)據(jù)類(lèi)型一模一樣頭結(jié)點(diǎn)是首節(jié)點(diǎn)前面那個(gè)節(jié)點(diǎn)頭結(jié)點(diǎn)并不存放有效數(shù)據(jù)。設(shè)置頭結(jié)點(diǎn)的目的是為了方便對(duì)鏈表進(jìn)行操作。頭指針存放頭結(jié)點(diǎn)地址的指針變量。確定一個(gè)鏈表只需要一個(gè)參數(shù)頭指針。算法通俗定義解題的方法和步驟。狹義定義對(duì)存儲(chǔ)數(shù)據(jù)的操作。對(duì)不同存儲(chǔ)結(jié)構(gòu)要完成一個(gè)功能所執(zhí)行的操作是不一樣的。例如輸出數(shù)組中所有的元素的操作與輸出鏈表中所有元素的操作肯定是不一樣的。這說(shuō)明算法是依附于存儲(chǔ)結(jié)構(gòu)的不同的存儲(chǔ)結(jié)構(gòu)所執(zhí)行的算法是不一樣的。廣義定義也叫泛型。無(wú)論數(shù)據(jù)是如何存儲(chǔ)的對(duì)該數(shù)據(jù)的操作都是一樣的。數(shù)組優(yōu)點(diǎn)存取速度快缺點(diǎn)需要一個(gè)連續(xù)的很大的內(nèi)存空間插入和刪除元素的效率很低。鏈表查找某個(gè)元素的效率低而鏈表不需要連續(xù)的空間來(lái)存儲(chǔ)數(shù)據(jù)每一個(gè)元素的空間存儲(chǔ)數(shù)據(jù)和下一個(gè)元素的地址??恐羔樥业较乱粋€(gè)元素。NULL的含義1.數(shù)值0。2.字符串結(jié)束標(biāo)記符。3.空指針NULL,表示的是編號(hào)位零的地址。 至于其到底是什么含義取決于解碼方式。計(jì)算機(jī)規(guī)定了以零為編號(hào)的存儲(chǔ)單元內(nèi)容不可讀也不可寫(xiě)。free (p);p NULL;*p 某值;對(duì)于被釋放的變量p要沒(méi)有給p寫(xiě)入NULL就可能出現(xiàn)任然可以對(duì)*p賦值的現(xiàn)象。但如果寫(xiě)如NULL計(jì)算機(jī)不允許對(duì)編號(hào)為零的存儲(chǔ)單元進(jìn)行讀寫(xiě)操作就避免了前面問(wèn)題的發(fā)生。宏定義含參宏定義#define ADD(a,b) ((a)(b)) int result ADD(3,4);1.括號(hào)的使用要給每個(gè)參數(shù)和整個(gè)表達(dá)式都加上括號(hào)以此避免宏展開(kāi)后出現(xiàn)運(yùn)算優(yōu)先級(jí)方面的問(wèn)題。2.參數(shù)為表達(dá)式時(shí)可能出現(xiàn)副作用當(dāng)參數(shù)是帶有副作用的表達(dá)式像自增、自減運(yùn)算時(shí)宏展開(kāi)后可能會(huì)產(chǎn)生多次求值的情況。#define MAX(a,b) ((a) (b) ? (a) : (b)) int x 5; int y MAX(x,10)// 宏展開(kāi)后是 ((x) (10) ? (x) : (10))x 會(huì)被遞增兩次3.字符串化操作符#借助#操作符可以把參數(shù)轉(zhuǎn)換為字符串字面量。#define PRINT(x) printf(#x %d,x) PRINT(10); // 會(huì)被展開(kāi)成 printf(10 %d\n, 10); 也就是 printf(10 %d\n, 10);4.標(biāo)記粘貼操作符##使用##操作符能夠把兩個(gè)參數(shù)連接成一個(gè)標(biāo)識(shí)符。#define CONCAT(a, b) a##b int xy 10; int result CONCAT(x, y); // 會(huì)被展開(kāi)成 int result xy;補(bǔ)充assert的作用assert斷言是編程中用于調(diào)試階段驗(yàn)證關(guān)鍵條件 / 假設(shè)的工具核心作用是「自我檢查」—— 確保程序運(yùn)行到某一位置時(shí)預(yù)期的條件必須成立若不成立程序會(huì)主動(dòng)觸發(fā)錯(cuò)誤斷言失敗幫助開(kāi)發(fā)者快速定位問(wèn)題而非等到錯(cuò)誤擴(kuò)散后才暴露。const的作用語(yǔ)義是只讀基礎(chǔ)類(lèi)型的值直接存在內(nèi)存棧中const 會(huì)鎖定這個(gè)值的內(nèi)存地址無(wú)法通過(guò)變量重新賦值修改會(huì)直接報(bào)錯(cuò)
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美综合网A| 国产精品熟女一区二区三区| 操婢日韩| 欧美 中文字幕 一区| 天天色综合影视网| 免费在线黄片视频| 97精品中文字幕| 91欧洲国产成人久久精品网站| 人人操,操人人| 97国产天堂岛| 91亚洲色人| 欧美九九爱| 亚91网| 中文操嬖片。| 中文字幕免费在线观看 | 性爱综合一区二区| 啊啊啊啊啊啊啊在线| 第四色奇米影视777| 久久久久久久久久久久久久久性生活视频| 日本国产欧美一区三区二区| 欧美日韩m| 99re免费| 神马久久久久久久久久久久| 国产激情视频一区区三区| 欧美综合自拍成人自拍第二十页| 97欧美在线| 日韩一性一交一A片俄罗斯| 夜夜嗷嗷一区二区| 精品一区二区国产日韩| 大香蕉免| 久久欲| 中 文字幕一区二区三四 五 区日 日 骚| 97视频网站| 国产精品久久久久久夜夜夜| 黄色片一区二区三区四区五区| 91色图片| 伊人女女资源在线观看| 国产伊人精品在线| 成人A片男人的天堂| 中文字幕日韩人妻视频一区二区三区| 久久中文字幕女同性恋一区| 日韩人妻大香蕉| 97免费视频在线观看| 91天天日| 四虎国产精品永久地址入口| 性色高清..……| 在线观看黄色电话| 欧美性爱超碰97| 亚洲麻豆精品二区三区| 亚州熟女乱伦| 色天欧美| 婷色五月天| 国产精品亚洲色婷婷久久久| 嗯嗯嗯啊啊啊干死我吧| www超碰| 久久 精品| 色情亚洲日本成人| 久久久精品视频免费观看| 亚洲日精品| 伊人网av| 久久无码成人| 九热久| 97精品久久久久久久| 波多野结衣一级视频| 呻吟 欧美 日本 中出| 色小视频蜜乳| 日韩三A大片在线观看| 久久精品中文| 怡红院视频在线| 久久亚洲AV无码专区国产精品 | 国产啊v在线免费播放| 天天日熟妇| 婷婷色综合| 亚洲色图尤物视频 | 欧洲一区二区| 亚洲欧美日产国产91毛片| 国产小u女在线观看| 天天干18禁| 日日干男人的天堂| 加勒比无码一区二区三区| 操人人| 久久久999国产精品| 中文字幕一二三区| 超碰三级秋霞| 伊人五月天| 天天上日日上日韩精品| 欧美激情 亚洲色图| 97精品国产手机| 91日韩在线| 欧美日韩在线国产在线| 国产精品久久久吖| 蜜臀久久99精品久久久久久婷婷| 竹菊一区二区三区AV线| 91人妻视频| 色色五月丁香| 天天视频黄网站| 婷婷色色五月天福利| 亚洲91射| 久九9精品| 中文字幕免费观看| 精品无码一二三四区| 这里只有精品久久| 亚洲 欧美 手机在线观看| 国产多人在线观看视频| 可免费观看的av毛片中日美韩| 97色欧洲| 99综合视频一体| 欧亚性爱在线视频| 日韩有码 一区二区三区| 97色亚洲| 26uuu国产亚洲综合| 啊啊啊免费| 91综合天天| 欧美丝袜美女电影一二三四区| 很黄很污的免费网站| 日本天天操| 久草免费在线一区二区| 国产高清精品福利| 超碰人妻在线| 亚洲人妻一区二区三区| 天美国产三级传媒| 欧美美女在线高潮999| 熟女丝袜视频| 美女露胸露屁股| 97超碰国产精品| 农村妇女一级二级三级视频| 亚洲无码色| 亚洲超碰在线| 920日本午夜免费| 九月丁香| 亚洲不卡不卡中文字幕不卡 | 亚州熟妇精品| 一区二区播放| 精品人妻一区二区三区不卡断 | 丰满人妻一区二区三区四区| 婷婷色香伊人| 国产乱伦视频污| 中国熟女老妇仑乱一区二区三区| www久久国产精品| 无码高清少妇久久| 男女一级A片大黄,一进一出| 欧美日韩成人在线| 人妻精品4K4K4K4K4| 欧洲中文字幕| 黑人精品久久97| 欧美影音在线| 99re99在线视频| 粉嫩av一区二区三区天美传媒 | 神马久久久久久久久久| 中文字幕伊人| 欧美热图99| 国产精品96| 不卡中文字幕aⅴ在线| 色哟哟综合| 国产精品999zyz| 91狼人| 五月婷婷啪啪| 日本三级人妻a人妻一在线| 亚洲乱色视频一区、二区在线| 久久久久久久少妇| 东京热,男人的天堂| 男人的天堂1024| 亚洲综合97| 亚洲天堂中文字| 成人福利视频网| 婷婷久久久| 日本一区二区三区精品| 91色综合色| 97网色| 国产精品爱欲| 日韩啪啪啪啪啪| 日韩99神马视频片| 欧美se综合| 亚洲成人在线高清| 99久热| 国产四虎在线| 2020中文字幕在线| 人人超碰在线观看黄| 亚洲欧美精品国产一区二区| 色色色999| 伊人一区二区三区| 亚洲久久久久| 操碰97| 天天综合,91入口| 欧美日韩国产三级黄色| 午夜福利成人免费视频| 99.色网| 97天天插| 香蕉人人操tv| 亚洲第一页欧美| 久久久无码精品人妻二区| 日本成a人v网站在线观看| 夜色AV无码手机在线影院| www.婷婷五月天| 先锋音影AV| 神马麻豆福利院| 国产精品999zyz| 深夜啪啪啪视频免费| 久久是精品| 夜夜操美女| 久久国产精品一级二级三级| 这里只有97精品| 激情抓乳插进去啪啪啪日韩| 天天综和| 色欧美亚洲| 人妻99p| 夜夜综合| 亚洲性爱成人| 91人妻丝袜无码| 熟妇人妻一二三区免费| 上海一级黄片| 天天碰操中国年青熟妇| 亚洲毛片基地专区| 三级三级三级日本99| 亚洲色图第一页| 久久女同性恋一二区| 亚洲欧美另类图片| 深爱五月天| 老司机福利社视频在线观看| 欧美久久久| 日韩青久久| www..com操老师| 69综合网| 综合国产影视三级| 殴美,日韩国产伦精品| 亚洲色图 综合| 99在线免费公开视频| 99999无码| 国产精品久久久久久久久久久久久久| 首页亚洲国产高跟丝袜诱惑视频| 亚州色图欧美色图| 久久老子无码午夜伦不卡| 尤物视频网 刘玥| 又粗又长又爽在线观看| 动漫av中文| 国产家庭乱伦性爱视频| 99RE在线视频精品,这里只有精品| 日本操逼无码| 成人综合网 欧美| 亚洲?V无码专区在线电影| 一区麻豆 高清中文字幕| 熟妇乱伦一区二区| 污污污8888| 一区二区三区黄色片a| 超碰 av 女人天堂| 操操操日本的逼| 午夜综合在线| 亚洲综合中文字幕有码| com 首页 18岁 禁区 女优 免费 精选 同城 | 二男一女成人A片| 久久久111| 黄片免费久久久久久久| 乱色老一区二区三区的观看方式| 久久婷婷视频| 97精品视频| 日本裸体久久色噜噜| 超碰97人人cao| 蜜臀av中字字幕网站| 乱伦强奸区日韩| 一区黄二区黄| 欧美探花网| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 欧美日本一区二区a人| 果冻传媒A片一二三区| 欧美视频在线视频免费va| 98超碰欧美| 日韩乱码av| 中文字幕美女91| 日影院久久婷婷夜夜网| 另类小说五月天| 国产伦精品| 二对二中文字幕。| 婷婷五月天成人网| 热思思免费视频| 色综合20p| 丁香六月综合激情| 狠狠久久手机视频精品| 国产熟女自拍| 国产在线76页| 最新中文字幕在线亚洲| 日韩中字av一区| 国产一区在线观看无码AV| 后入式五六区| 九九热免费国产视频婷婷伊人五月 | 日本欧美不卡| 亚洲免费97免费| 国产精品成人无码av| 精品久| oumeizonghese,www| www超碰| 26uuu性物| 青青草依人大香蕉| 国产精品丝袜久久亚洲不卡| 九色 人妻 大香蕉| 国产女人成人精品视频| 99老司机精品视频在线观看| 人妻少妇精品视频一区二区三区| m欧洲一级午老| 婷婷五月天激情四射| 欧美日韩黄片精品在线| 精品九九九九九九| 欧美九九九| 久久伊人青青草| 久久乐| 日韩性爱视频免费在线| 在线观看免费视频国产| 久久精品黄色| 999久久芭蕾| 1204av韩国| 综合国产97| 国产成人自拍视频在线| 国产精品熟女九色九色蜜臀| 男女猛烈无遮掩视频免费软件| 欧美自拍网| 亚洲涩图欧美| 亚洲性图91| 大香蕉天天看妹子| 亚洲天堂综合AV| 丁香九月激情啪| 日韩欧美国产一区二区三区四区| а√天堂资源官网在线资源| 亚洲色交| 色九九久九九| 人妻美腿丝袜日韩| 青青青草伊人精品| 狠狠做深爱婷婷久久二区| 色月天AV导航| 不卡超碰护士AV在线免费播放| 国产精品午夜高潮呻吟久久av| 啪啪视频亚洲第一| 二男一女成人A片| 先锋影音av先锋一区| 亚洲风情在线观看| 综合 亚洲 欧美| 亚州色图狠狠干| 热天堂一区二区| 亚洲色图大香| 精品.99999| 嗯嗯啊操我| 涩五月婷婷| a网站免费观看| 六月丁香啪啪| 婷婷五月丁香五月| 中文字幕老熟妇黄色视频| 花花AV导航| 欧美丰满少妇交换91欧美精品| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 91性高朝久久久久久久久| 又粗又长又大国产不卡| a男人的天堂久久一级A毛片| 五十路六十路七十路熟婆| 久久亚洲中文字幕视频| 北约熟女超碰| 國產尤物AV尤物在線觀看| 日本天天操| 精品无码产区一区二| 青青草十区九区爱夜| 影音综合网| 精品小视频在线| 欧美在线l亚洲| 60秒免费小视频| 偷拍片久久| WWW美腿丝袜香蕉中文| 中文字幕免费看| 激情情色五月天| 国语精品av| 老女人综合网| 三级AV入口| 强奸乱伦日韩AV| 国产欧美亚洲精品a第2页| 精品国产一级久久| 青草视频在线看看看看看看看看看| 欧美少妇熟女| 青青草男人天堂| 97伦乱| 欧美热图99| 久久久96| 亚洲日韩美国人妻| 丁香五月色| 91丝袜美腿网站| 国产乱人妻精品入口| 久久久久九九九九九| 亚洲人天堂| 国产女s强制榨精视频| 欧美日韩操逼动图| 欧美视频在线视频免费va| 330Dv国产女人终合视频极品人与兽 | 91久久久久久久久久久| 91久久久视| 精品人妻一区二区蜜桃视频 | 九九免费影片| 精品999999| 18禁美女裸体无遮挡啪啪| 激情久久久| 啊啊啊啊啊啊啊国| 国产乱子伦一区二区三区免看| 欧美成人精品一区| 99国产精品视频尤物| 婷婷色导航| 欧美白嫩在线放| 天堂射| 国产小u女在线观看| 亚洲欧美激情在线视频| 在线情色电影 91大| 久久黄黄黄| 久久欲| 色色激情| 蜜臀久久久国产| 国产熟女一区二区| 日本一区二区三区四区免费观看| 亚洲午夜免费狠狠干| 999综合色| 香蕉99秘 一区精品蜜桃臀| 亚洲字幕一区二区| 久久久一热在线播放| 久九9精品| 国产精品美女视频诱惑| 九九色婷婷| 天天色怡春院| www久久国产精品| 丁香啪啪| 国产精品毛片| 亚洲国产成人福利在线观看| 亚州成人A√| 96久久久久久久| 人人干人人操人人..com| 欧美日韩黄色片一区二区三区四区人与兽做爱| 欧美视频一区二区三区| 日va操| 99啪啪| 九九九久久久| 加勒比大香蕉视频在线| 免费精品AB| 亚洲最大成人a毛毛片| 俺去久久| 亚洲国产综合图区中文字幕 | 嗯……啊…嗯嗯…啊…好舒服| 欧美操逼录像国产黄色国产| 精品一区二区亚洲国产| 欧美在线视频观看一二三四区高清| 激情黄色片在线观看| 日韩草久视频| 97在线免费看视频| 又大又白奶子| 在线欧美亚洲| 丰满人妻一区二区三区| 天堂亚洲精品| 久久人人爽人人爽人人片Ⅴ| 日日干夜夜骑| 欧美日韩操逼嗦吊| 欧美草草高清日韩视频| 日本久久天堂| 97干在线视频| 久久9亚洲| 亚欧高清| aaa淫乱视频| 无码137片内射在线影院| 黑丝少妇麻豆| 国产乱伦性爱区| 狠狠夜色午夜久久综合在线| 国产对白刺激视频| 国产欧美后入| 国人欧美精品一区二区| 一本大道久| 91chinese在线| 青青草一区二区高清无码视频| 午夜男人一级A片7777| 亚洲 中文 欧美 日韩 在线| 任你草| 久久东京热久久| 久久久久国产亚洲一区欧美色图日韩| 天天夜躁日日躁狠狠2002| 偷拍超碰| 国产伦乱91| 欧美美逼| 美女黄页| 搞中出久久| 长长久久曰曰夜夜成人网| 99999国产精品| 一区二区偷拍拍视频| 九九碰九九爱97超碰| 99999久久久久9国产精品| 国产精品免费久久久久久久久久| 热久久九九热| 中文字幕亚韩| 狠狠爱夜夜| 日本免费不卡二区| 中文字幕一区二区三区高清| 内射卯月麻衣| 超碰碰碰碰| 欧美性高潮在线| 五月天色图| 亚洲人妻久久| 91偷拍欧美亚洲| 秋霞曰韩R级| 婷婷午夜清品久久久久久久性色视频观| 国产 日韩 欧美 人妻 熟女 中文 69人妻精品一区二区绯色 | 蜜臀久久99精品久久久久| 射丝袜高跟鞋99| 天天操夜夜操狠很操| 狠狠操狠狠燥| 色噜噜综合在线| 欧美成人A√在线一区二区| 任我爽在线视频免费观看| 综合色99| 18禁无码永久免费无限制| 久久久91福利姬| 清柠毛片| 亚洲最大成人a毛毛片| 九热久| 亚洲欧洲无码97久久精品| 97任你吞精| 2024年最新色情网站在线观看| 亚熟hd视频在线| 色综合色色| 家庭乱伦国产| 色97干| 91成人社区| 久久黄黄| 免费在线观看国内色片网站网址| 婷婷丁香人妻| 啊啊啊啊啊啊啊在线| 91美女中出| 免费无码国产精品v片在线观看| 久久精品女同亚洲女同13| 无码heyzo高清一区| 久久久精品无码亚免费| 97无码视频在线播放| 影音资源男人日韩| 97国产天堂岛| 超碰三级秋霞| 国模吧 一区二区三区| 草莓精品视频在线免费观看| 60秒不遮不挡| 亚洲人综合| 热久久国产精品视频大陆精品| A V少妇特黄三级| 久久av一级av少妇av高潮| 91国模| 少好三P| 天天天天做夜夜夜夜做| 久久久影院| 超碰精品在线| 中文字幕av乱伦| 日本三级A片网站com| 97超碰色色| 狠狠色五月亚洲91| 亚洲图片偷拍欧美| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 天天爽爽爽爽| 婷婷综合网| 91丨熟女丨丰满熟女| 国产黄色影片在线观看| 超碰午夜| 亚洲欧洲激情卡通另类文学四射小说网站| 天天影视综合色| 久久九九精品一区二区| 日韩一级二级三级免费看完整版国语版| AV色天香在线| 天天操天天射青青草| 六月婷婷综合| 亚洲日韩精品在线播放| 免费操逼视频下载| 99久久精品无码一区二区| 人妻 丝袜美腿 中文字幕| 成人av性爱电影在线观看| 91 欧美| 中文字幕丰满子伦无码专区在线视频最新 | 亚洲 中文字幕 精品| 91日韩网站| 亚洲自拍小说| 久久香蕉国产线看观看亚洲女人 | 91在线丝袜| 丰满少妇精品一区二区| 一区二区三区在线日韩影院观看| 亚精品无码毛片一区二区三区| 日韩精品电影| 97网址97| 蜜乳av一区二区三区四区不卡| 后入日本1234| 国产精品久久久午夜夜伦鲁鲁| 97在线视频免费看| 在线中文字幕视频| 国产91精品在线免费| 在线日韩日本亚洲国产| 韩国免费播放一级毛片| 亚洲色图尤物视频| 五月天丁香婷婷综合网站| 人人操人人叉人人插人人| 人妻精品视频一区二区| 国产成人网址| 午夜天天碰综合视频| 亚洲综合网图| 欧美青青视频| 老色鬼成人精品视频下载大在线观看| 日韩大香蕉AV影片| 操碰97| 久久成人午夜精品影院 | 无码伊人久久大杳蕉中文无码| 国产热RE99久久6国产精品首| 97人人射| 97 视频在线| 东京热大香焦| 2017亚洲天堂| 免费日韩黄片| 日本123区操B视频| 熟妇高潮一区二区免费视频| 欧美A√综合网| 久肏视频字幕| 国产精品com| 久久首页| 啊啊啊啊嗯嗯嗯用力好爽 | 91亚洲高清| 一个国产在线综合网站| 亚洲 欧美 手机在线观看| 日夜啪电影| www.AV有限公司一区| 成人十八禁日韩欧美一二三| 久久久无码精品人妻二区| 欧美激情专区| 国产Aα| 99色综合| 精品无码产区一区二| 九九九精品美女| 视频黄色国产一级| 好吊妞转入那个网| 欧美少妇色综合| 丰满人妻-区二区三区| 成人自拍三级在线观看| 亚洲制服欧美另类内射| 国产成人资源| 四虎精品一区| 日婷婷| 污啪啪啪视频| 精品女同一区| 影音先锋日本乱伦| 婷婷精品视频| 91熟女.com| 91精品人妻偷情| 五月婷丁香| 欧美在线 亚洲| 精品亚洲| 久久人妻精品| 日日干夜夜欢| 精品无码久久久久久国产浪潮| 狠狠操狠狠插| 91男人天堂网| 久久久久亚洲AV无码专区少妇| 污啪啪啪视频| 色网亚洲人| 人妻丰满熟妇一区二区三| 天天做天天爱天天高潮| 久草线上视频免费看| 香蕉国产精品麻豆亚洲欧美日韩| 九九九九九九精品| 黄片www视频免费| 久草视频分类在线| 国产人妻精品一区二区三区秋霞 | 又黑又大又粗| 俞拍久久国应视频| HEYZO高无码国产精品227| 日韩精品一二三四| 操久久久久| 国产精品免费视频人成| 日韩 欧美 国产 麻豆| 久久精品国产亚洲AV清纯| 很很干很很操| 久久久555| 97国产成人精品免费视频| 美女91av| 亚洲日韩美国人妻| 久久久久国产| 中国少妇XXXX做受| 国产极品久久久| 精品成人无码| 日日夜夜国产综合| 中文字幕奈奈美被公侵犯| 91天美传媒精品| 免费一级精品啪啪视频| 男人的天堂色偷偷青青草视频婷婷网| 96精品久久久久久久久久| 久久人人妻| 91春色| 欧美老妇综合网| 激情熟女12P| 久久神马影院| 亚洲欧美自拍偷拍| 60秒免费视频| 亚洲砖码砖专无区2023| 久久久精| 日本123区操B视频| 日1区2区3区2020| 99操视频| 九九九九久久久久| 伊人久久国产免费观看视频| 99人妻碰碰碰久久久久禁片| 男插女青青影院| 天天谢天天干| 欧美黑人91| 自慰白浆在线观看| 国内一级精品| 色性荡荡荡荡视频| 另类亚洲一区二区三区| 97超碰超欧美。| 国产精品无码论坛| 精品人妻av区天天看片| 99re6国产精品99re在线| 肉动漫无遮挡h在线观看| 青青草日本中文字幕| 国产传媒操逼视频| 国产91 丝袜在线播放| 天天欧美欧美亚洲网| 日韩激情电影中文字幕| 色综合久久夜色精品国产天堂| 福利操逼| 人妻熟女一区二区三区视频| 国产少妇与亚洲av| 欧美人与性动交a美精品| 亚洲人精品午夜不卡| 色97| 中文字幕久热视频在线| 亚洲 欧美 日本 国内 首页| 亚洲五月丁香花狠狠干一区二区三区| 翔田千里A片一区二区| 91精品免费| 婷婷在线视频| 午夜乱轮操逼视频免费看| AV在线播放网址| 91丝袜美女| 黄色一区二区秘书性感| 亚洲久久东京热一二三四五区视频| 深爱激情五月天| 激情小说图片亚洲首页| 国产青青综合伊人| 人妻精品综合中文字幕在线 | 精品无码秘 人妻一区二区| 日韩淫色网| 夂久色| 国产成人免费观看在线视频| 亚洲综合网91| 97视频在线视频| 综合色图区| 午夜理论片在线观看免费| 9久久久久| 色香在线| 欧美极品女人的天堂| 激情无码日韩| 91国产操逼视频| 超碰 欧美| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美亚洲丝袜美女电影| 一级久久性爱视频| 熟妇熟女一区二区三区| 亚欧美色图| 国产精品乱码久久久久久久久久久久| 国产福利第一视频| 校园春色五月天| 久久久国产精品亚洲精品| 免费观看有码高清视频| 乱伦熟女区| 久热影视| 欧美高清第一页| 大但人体久久久久| 亚州色站 日韩电影| 国产精品人妻熟女aⅴ| 国产剧情在线| 日本精品加勒比海一区| 青青青艹在线视频| 欧美三级一级| 亚洲中文字幕97久久精品少妇| 久草福利在线资源站| 国产成年女人免费视频播放a| 中文字幕激情小说| 精品一区二区久久| 97公开久久| 97 视频在线| 加勒比在线视频| 思思热在线视频精品| 欧美激情中文字幕另类小说| 能在线播放的国产三级| 欧美高清无码免费视频高清版| 超碰97 线线 在现| 久操电影网| 日本高清视频在线观看黄已三辽| 热久久国产精品视频大陆精品| 久久国产精品91| 九九热精品| 日本道久久综合色色| 国产精品熟女九色九色蜜臀| 欧美一区二区三区互相| 中文乱码字字幕在线第5页| 97网色| 日韩无码人妻中字久久三区四区| 国产风韵犹存熟妇三区| 亚洲自拍青操视频| 丝袜综合色图| 97超碰天天| 欧美激情亚洲色图| 97人人射| 国产亲戚伦亲在线| 国产AV精久久| 九九无码视频| 无码日韩网站| 丁香婷婷大香蕉| 欧美日韩99| 无码免费一区二区三区啪啪| 婷婷五月天小说| 青青草密桃在线播放| 亚洲天堂综合AV| 亚洲美女精品| 99啪啪视频| 亚洲色91C| 18禁久极品美女久久哦哟呀!| 亚洲涩图欧美| 中文字幕二区| 久久久久久久9| 亚洲综合20p| 久久精品久久久久久久久| 翔田千里一区二区三区奶水| 国产精品视频在线观看| 欧美色乱| a片久久久久久久久久久久 | 久草免费在线一区二区| 另类一区| 午夜免费福利视频一区| 欧美亚州手机在线| 欧美亚男人的天堂| 天堂国产AV| 裸体美女久久久| 97久操| 97亚洲精品超碰| 久久久96| 亚洲免费成人在线高清无码视频| 国产色精品午夜大片| 香蕉久久国产AV一区二区| 天天干一干| 色哟哟-国产专区| 欧美一品道| 日本精品加勒比海一区| 尤物av网站免费在线播放| 国产男女边吃边摸视频网站| 久久肏大逼| 人妻熟女字幕一区二区| 久久精品视频在线观看| 91精品久久久久久77777| 亚洲天天更新| 国产日韩精品无码去免费专区国产| 人妻在线视频| 中亚av| 91精品免费| 亚洲丝袜少妇在线| 乱伦图av| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 91制服丝袜| 国产区日韩区在线观看| 欧美亚洲尤物久久| 国产精品一二三免费网站| 亚洲影院小综合| 99热18这里只有精品| juliaann欧美丝袜办公室| 男女啪啪网站免费视频| 333kkkk·亚洲com久久| 黄色大片一区二区密桃丝袜| 日韩欧美中文字| 国产深喉视频一区二区| 久久久久亚洲AV无码专区少妇| 91美女高潮| 91成人无码| 欧美日韩在线国产在线| 国产玖玖| 亚洲精品蜜桃久久久久久久| 葡萄牙性视频一二区| 黄色网址在线免费观看| 无码91| 中文字幕一区二区三区四五区| 五月天我淫我色av| 国产九月婷婷| 久久色AV线| 婷婷丁香九月| 日韩AC| 丁香五月天久久精品视频一区二区三区| 欧美淫乱视频| 国产精品嫩草影院免费| 超91综合网| 99这里都是精品| 亚洲欧洲中文日韩女优乱码| 天美国产三级传媒| 亚洲欧美内射| 大香蕉www.超碰| 国产自产一区视频在线| 青青操日韩| 91在线欧美| 中文字幕一区二区三区视频播放| 一区二区偷拍拍视频| 在线啊啊啊| 边做饭边操逼逼| 久久极品一区二区| 精品176精品2| 日韩欧美操逼xxx| 91黑人无码激情在线| 九九热精彩视频| 日韩黄色av中文字幕| 欧美色偷拍| 精品国产乱码久久久久久网站入口| 淫荡少妇免费| 天堂伊人久久| 日本乱人伦片中文三区| 日本免费不卡二区| 亚洲中文字幕熟女少妇一区二区| 欧美黄色片AAAAA| 欧美天堂亚洲电影院一区在线播放| 久久久久久久久久va| 亚洲另类久操网| 综合色欧美| 成人综合久久精品色婷婷| 久久久草草精品| 久草免费福利在线播放| 中文字幕88av在线| 亚洲欧美另类小说| 女优免费一区二区永久| 清纯唯美激情| 色色色色电影网| 尤物视频偷拍免费| 中文字幕123| 91天堂丝袜美腿| 欧美网站免费| 中文字幕在线第二页| 怡红院一区二区熟女人妻| 97就爱干| 日韩无码成人电影| 91操熟女视频| 亚洲1区| 亚洲第一页色网| 蜜桃久久综合视频| 91狠狠综| 亚洲欧洲精品成人| 精品国产无码中文| 久久精品高清无码一区| 综合操逼| 91亚洲最新在线| 香蕉久久国产AV一区二区| 久久久亚洲熟妇资源| 丁香激情五月| 九九AV| 免费看片黄| 五月激情小说| 99999久久精| 一二三四日本视频高清| 久久久久久亚洲Av无码精| 看黑丝美女操逼青青网站| 精品美女久久久久| 伊人网在线视频| 免费看欧美美女黄色大片| 国产精品久久久午夜夜伦鲁鲁| 91成人高清在线观看| 高凊专区人人操| 中文字幕日韩专区精品系列| 狠狠亚洲| 91色色色| 乱伦强奸区日韩| 九九九九免费高| www.婷婷| 日韩无码人妻| 日本免费一区二区不卡| 五月丁香六月婷| 国产精品久久久久久久无码AV| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 成人情色综合网| 一区二区三区 丝袜 高跟 美腿| 国产毛片毛片4p懂色| 97伪v| www.yw尤物| 网站A V在线| 校园春色宗合网| 色色色999| 久久色精品视频在线| 天天综合网在线| 少妇高潮对白在线观看| 91狠狠狠| 美女主播色欲91抠b在线播放| 久久五月天婷婷丁香中文字幕| 久久久久久久久久久久色网| 99综合自拍| 91在线超高颜值国产| 91老司机精品| 女生自91网站| 99热精品在线播放| 人妻一二三区| 怡春院久久| 性色一线| 欧美成人一级免费电影| 亚洲AV成人精品网站在AV| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 中日韩久久人妻一区二区| 成人片在线播放| 综合夜夜| 毛片99-全集电影手机免费观看完整-B029AV| 国产按摩一区二区三区| 免费的黄片wwwwww| 亚洲,日韩,欧美,成人播放| 老司机香蕉久久久久| 综合网欧| 久久99操天天日| 激情接吻视频久久久久久| 日韩精品午夜操呦呦不卡影院| 极品久久久久久久久久久久久久| 加勒比大香蕉视频在线| 亚洲成人无码影院| 国产精品免费1区2区视频| 欧美午夜熟妇黑人精品91| 大乔未久88一区| 五月天色综合| 欧美劲爆视频一区二区| A级毛片在线看免费| 人妻第一页| 九九九国产精品| 久久大线蕉一区| 日韩av熟女一区二区三区成人| 色九九综合| 啪一啪免费视频| 国产女人与拘做受视频免费| 屁股久久久久久| 丰满欧美放荡少妇在线| 91少妇通奸网站| 欧洲乱码视频| 爱欲AV| 91neishe| 色婷婷小说| 久久久97| 手机在线观看不卡无码av| www.91理论| 欧美日韩午夜精品一区二区三区| 懂色Av| 日韩精品一二三| 亚洲乱熟女一区二区| 人人九九精| 亚洲性猛| 99热国产| 蜜臀av网址| 欧美日韩国产三级黄色| 嫩草美女久久| 成人性爱免费播放| 青娱乐福利99| 日韩av电影成人在线| 五月丁香激情四射| 农村女一级毛卡片| 超碰97综合网| 日韩欧视频| 日韩精品一区二区人人人| 97欧美色综合| 97超色| 揉揉揉夜夜| 精品玖九九久| 欧美资源| 欧美色图色综合| 亚洲欧美综合网站| 免费男人的天堂| 久久久久久免费电影| 九九九九九九精品| 日本熟妇色熟妇在线视频播放| 亚洲系列欧美| AV男人天堂网| 啊啊啊轻点在线观看| 国产精选视频| 国产成人亚洲精品无| 欧美人体性爱互联网第一页婷婷日本| 国产成人久久精品蜜臀| 久久久久久九九九九| 激情天天视频| 在线观看AV片| 成人福利视频网| 日本三级中国三级99人妇网站| 成片免费观看视频大全| 人妻AV在线| 久视频在线观看| 日日AV加勒比| 破处bbq| 久久国产乱子伦精品免费女,网站| 超碰91在线| 日韩三级在线观看网站| 久久综合亚洲色1080p| 欧美顶级黄色大片免费| 五月天伊人| 久久久亚洲精品电影免费看| 伊人国产视频| 欧美天天综合站| 欧美后入式| 五月亭亭六月丁香| 中文字幕精品日韩中文字幕| 国产日本久久免费精品| 国产精品人人爽人人做可爱福利| 九九热av| 国产精品久久久啊| www.yeyecao| 日本欧美国内在线| 黄页18禁| 亚洲日韩乱码中文无码蜜桃臀网站| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 一级做a爰片久久毛片图片| 国产成人亚洲精品无码古代早漏男| 精品少妇一区二区三区在线视频| 色婷婷五月天| 精品久久久久久久久久久久 | 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 日本网色| 91久久精品国产| 91爰爱欧美| 国产精品在线免费| 婷婷av在线中文字幕| 2024人人操人人摸| 蜜臀99999| 智利AV在线网| 国产呦精品系列在线观看| 51一区二区三区| 一区二区三区在线资源| 亚洲综合夜色| 3PAV乱伦视频| 国产精品无码在线| 国产精品久久久| 天天做日日爱夜夜爽| 99热成人| 啊啊啊啊操死我了| 欧日韩一二三f区| 免费黄色片。| 91 刺激在线| 精品一区二区三区四区外站| 国产精品香蕉| 在线v中文字幕一区二区三区 | 九九热久久99精品re| 9久综合网| 91操人| 色欲av一区二区三区蜜芽| 蜜臀av在线播放一区二区三区| 大香蕉欧美国产日韩高潮| 欧洲亚洲少妇| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 一直超碰| 欧洲特黄毛片免费看欧洲毛片| 久久99亚洲精品久久99果| 97视频620| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 欧美亚洲一区二区久久久婷精品大包诱| 好湿好紧视频| 欧美视频一区二区在线| 欧美日日夜夜| 欧美激情亚洲| 日日夜夜精品| 毛片17S| 久久久蜜桃臀无码视频| 久久98| 亚洲综合贴图91| 秋霞成人一级在线观看| 偷拍 亚洲| 欧美自拍网| 韩国一级婬片A片AAAAA| 日韩中文9| 九九综合久久中文字幕| 2019天天操天天爽天天拍| 日本一级特级毛片视频| 啪啪一区|