版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
C語言高級進階你懂c語言,我不信。1.數(shù)據(jù)類型(DataType) .-1-1.1.內(nèi)存-1-1.2.補碼-1-1.2.1運算規(guī)則11.2.2補碼特點21.2.3char(8位)補碼的展示21.3.數(shù)據(jù)類型-2-1.3.1數(shù)據(jù)類型21.3.2范圍計算31.3.3.數(shù)據(jù)類型是對內(nèi)存的格式化31.4.類型轉(zhuǎn)化-6-1.4.1.類型轉(zhuǎn)化的原理61.4.2隱式轉(zhuǎn)化71.4.3.顯示(強制類型)轉(zhuǎn)化71.5.練習-7-1.5.1.下面的代碼輸出什么?71.5.2.以下程序輸出什么?82.進程空間(ProgramSpace)92.1.進程空間-9-2.2.進程/程序-9-2.2.1程序92.2.2進程92.2.3進程到程序92.3.數(shù)據(jù)在進程空間的存儲102.3.1示意圖102.3.2.數(shù)據(jù)在進程空間112.4函數(shù)的壓棧與出棧122.4.1普通函數(shù)122.4.2遞歸函數(shù)132.5課堂實戰(zhàn)132.5.1.如下程序中數(shù)據(jù)存儲在哪里132.5.2.用遞歸正/逆序打印一個數(shù)組143.數(shù)組(Array)153.1一維數(shù)組153.1.1本質(zhì)153.1.2初始化153.1.3訪問163.1.4作參數(shù)傳遞173.1.5.返回堆中一維數(shù)組183.1.6練習183.2.二維數(shù)組 .-22-3.2.1本質(zhì)223.2.2初始化223.2.3訪問223.2.4線性存儲243.2.5作參數(shù)傳遞253.3數(shù)組指針253.3.1引入253.3.2定義253.3.3別名263.3.4.數(shù)組指針與數(shù)組名263.3.5應用263.4多維數(shù)組273.4.1本質(zhì)分析273.4.2形像描述283.5課堂實戰(zhàn)283.5.1.求值?-28-3.5.2.下面代碼的值為多少?284.指針(Pointer)294.1.內(nèi)存編址與變量地址294.1.1編址294.1.2變量地址294.2指針與指針變量304.2.1指針的本質(zhì)304.2.2指針變量304.2.3運算324.2.4課堂實戰(zhàn)334.3二級指針334.3.1定義與初始化334.3.2間接數(shù)據(jù)訪問344.3.3.初始化一級指針354.3.4.二級指針的步長374.4指針數(shù)組(字符指針數(shù)組)384.4.1定義384.4.2使用384.4.3.二級指針訪問指針數(shù)組394.4.4常見指針數(shù)組404.5指針的輸入與輸出414.6堆上一維空間414.6.1.返回值返回(一級指針)414.6.2參數(shù)返回(二級指針)414.7堆上二維空間424.7.1.一級指針作返值輸出 .-42-4.7.2.二級指針作返值輸出434.7.3.三級指針作參數(shù)輸出444.7.4課堂練習444.8.const修飾指針-47-4.8.1const修飾變量474.8.2const修飾符484.8.3const修飾指針指向484.8.4應用(修飾函數(shù)參數(shù))494.9.練習-49-4.9.1.請手寫下面代碼的輸出結(jié)果494.9.2天生棋局505.函數(shù)(Fucntion)515.1函數(shù)多參返回515.1.1引列515.1.2正解515.2函數(shù)指針515.2.1函數(shù)的本質(zhì)515.2.2.函數(shù)指針變量定義與賦值525.2.3.函數(shù)指針類型定義525.2.4函數(shù)類型別名535.2.5函數(shù)指針調(diào)用535.2.6函數(shù)指針數(shù)組535.3回調(diào)函數(shù)545.3.1問題引出545.3.2回調(diào)(函數(shù)作參數(shù))555.3.3本質(zhì)論56qsort-56-5.4遞歸函數(shù)595.4.1.迭代變遞歸引入595.4.2遞歸公式605.4.3書寫公式605.4.4遞向處理615.4.5歸和處理615.4.6返值遞歸615.5.練習-62-5.5.1.(*(void(*)())0)();-62-6.再論指針與數(shù)組636.1.一級指針與一維數(shù)組名636.1.1等價條件636.1.2便利訪問636.2.二級指針與指針數(shù)組名 .-63-6.2.1等價條件636.2.2便利訪問636.2.3.通過二級指針申請二維空間636.3.數(shù)組指針與二維數(shù)組名636.3.1等價條件636.3.2便利訪問636.4.關于二級指針與二維數(shù)組名636.5對數(shù)組名的引用646.5.1一維數(shù)組646.5.2二維數(shù)組646.6小結(jié)與練習646.6.1指針-數(shù)組-函數(shù)646.6.2.請寫出右邊的示意646.6.3傳參匯總656.6.4.寫出程序的運行結(jié)果657.基于數(shù)組排序(Sort)提高篇677.1選擇優(yōu)化677.1.1.選擇原理與步驟677.1.2代碼實現(xiàn)677.1.3優(yōu)化升級677.2冒泡優(yōu)化687.2.1.冒泡原理與步驟687.2.2代碼實現(xiàn)687.2.3優(yōu)化升級697.3快速排序697.3.1.排序原理與步驟697.3.2代碼實現(xiàn)707.3.3邏輯質(zhì)問707.4.練習-71-7.4.1實現(xiàn)二級排序718.基于數(shù)組的查找(Search)728.1線性查找728.2二分查找728.2.1原理步驟728.2.2迭代版(Iterative)728.2.3遞歸版(Recursive)739.字符串(String)759.1字符串常量759.1.1定義相關759.1.2.c語言處理字符串 .-75-9.2字符數(shù)組759.2.1.字符數(shù)組與字符串769.2.2不等價條件769.2.3等價條件779.2.4N系列字符串函數(shù)779.3.基礎字符串操作函數(shù)及自實現(xiàn)779.3.1.strlen-77-9.3.2.strcpy/strncpy-78-78-9.3.4.strcmp/strncmp-78--79-9.3.6.atoi/itoa-79-81-9.3.8.strcspn/strspn-82-82--84-9.4.trim系列879.4.1引例879.4.2去除右空格879.4.3去除左空格879.4.4去除全空格889.4.5去除任意字符889.5遞歸逆置字符串889.5.1非遞歸實現(xiàn)889.5.2遞歸逆置899.6內(nèi)存操作函數(shù)909.6.1.memset-91-9.6.2.memcpy-92-9.6.3.memmove-92-9.6.4.memcmp-93-memchr-93-9.7.練習-93-9.7.1.s2s1中最后一次出現(xiàn)的位置939.7.2.清空字符串中的制表符939.7.3格式化文件939.7.4.s1s2循環(huán)移位所得939.7.5求字符頻度939.7.6壓縮字符串939.7.7.atoi功能939.7.8.itoa功能9310.數(shù)據(jù)結(jié)構(gòu)(雙向循環(huán)鏈表)9510.1.雙向循環(huán)鏈表存在的意義 .-95-10.2鏈表構(gòu)成9510.2.1節(jié)點圖示9510.2.2節(jié)點碼示9510.2.3空鏈表示意9610.2.4非空鏈表示意9610.3.雙向循環(huán)鏈表靜態(tài)形式9610.3.1節(jié)點代碼9610.3.2靜態(tài)模擬9610.4.雙向循環(huán)鏈表的操作9710.4.1創(chuàng)建9710.4.2插入9810.4.3遍歷9910.4.4查找9910.4.5刪除節(jié)點10010.4.6排序10110.4.7銷毀10210.5鏈表應用-貪吃蛇10310.5.2MVC架構(gòu)分析10310.5.3其它10310.6練習10410.6.1.用雙向循環(huán)鏈表實現(xiàn)讀文件到內(nèi)存10411.動態(tài)庫與靜態(tài)庫(Library)10511.1函數(shù)庫10511.1.1庫存在的意義10511.1.2庫的劃分10511.1.3庫的命名規(guī)則10511.1.4靜/動態(tài)庫特點10511.2.linux庫存放的路徑-106-11.2.1使用特點10611.2.2.查看一個文件的庫的使用情況10611.3標準庫的使用10711.3.1.libm.a-107-lib.so-107-11.3.3比較10811.4.自定義庫的生成與使用11011.4.1多文件編程11011.4.2.靜態(tài)庫的生成與使用11111.4.3.動態(tài)庫的生成與使用11211.5gcc的編譯選項11311.6Linuxsqlite311411.6.1編譯動態(tài)庫11411.6.2.編譯成靜態(tài)庫: .-115-12.配置文件讀寫(File)11612.1文件回顧11712.1.1文件基礎11712.1.2文件操作11712.2鏈表回顧11712.2.1節(jié)點11712.2.2創(chuàng)建11712.2.3插入11712.2.4求長11712.2.5查找11712.2.6刪除11712.2.7排序11712.2.8銷毀11712.3字符串處理回顧11712.3.1常規(guī)處理11712.3.2去空處理11712.4實現(xiàn)登錄系統(tǒng)11712.4.1鏈表節(jié)點設計11712.4.2.讀文件并處理字符串11812.4.3登錄11813.本地數(shù)據(jù)庫(SQLite)11913.1本章綜旨11913.2.SQLite簡介-119-13.3數(shù)據(jù)庫基本概念11913.4.sqlite官網(wǎng)-120-13.4.1下載12013.4.2.NavicatforSQLite-120-13.5SQLite管理操作12013.5.1.sqlite3交互模式12013.5.2創(chuàng)建銷毀表12313.5.3列類型12313.5.4列約束12313.5.5插入與查詢12513.5.6排序12613.5.7.修改與刪除記錄12613.5.8常用函數(shù)12713.5.9備份與恢復12713.6.Vs/Qt+SQLite配置-127-13.6.1windowlib/dll的關系12713.6.2.lib文件128建立三方庫相關的文件夾 .-129-13.6.4.pro文件12913.6.5測試環(huán)境12913.7C/C++SQLite13013.7.1.API詳解13013.7.2實戰(zhàn)增/刪/改查13213.7.3.sqlite3_get_table13413.7.4防注入13514.C語言中的范型(Generic)13614.1.void系列-136-14.2macro系列136union-136-15.附錄(Append)13715.1ascii碼表13715.2.c運算符優(yōu)先級-138-15.3SVN配置與啟動13915.3.1官方下載地址13915.3.2.創(chuàng)建服務配置文件13915.3.3配置配置文件13915.3.4啟動服務13915.3.5.創(chuàng)建與刪除服務14015.3.6更新與提交140-140-15.4.1配置14015.4.2啟動14115.4.3其它141-141---PAGE9-內(nèi)存的最小單位是比特位,最小編址是字節(jié)內(nèi)存的最小單位是比特位,最小編址是字節(jié)數(shù)據(jù)類型內(nèi)存320-4G,情形如下:FFFFFFFFFFFFFFFEFFFFFFFDFFFFFFFCFFFFFFFBFFFFFFFAFFFFFFF9FFFFFFF800000009000000080000000700000006000000050000000400000003000000020000000100000000補碼運算規(guī)則補碼的運算規(guī)則是互逆的。數(shù)值規(guī)則補碼備注正數(shù)本身正數(shù)的計算機表示符號位為0負數(shù)取反+1負數(shù)的計算機表示符號位為1補碼特點00符號位同普通位一并參與運算補碼可以使加減乘除,全部變加法char(8位)補碼的展示無符號數(shù)8位數(shù)據(jù)的排列組合有符號數(shù)0000000000100000001120000001023000000113····0111111112710000000-128····25311111100-325411111110-225511111111-1數(shù)據(jù)類型AdministratorAdministrator2020-02-1009:37:42#include<stdio.h>//數(shù)據(jù)類型是對內(nèi)存的格式化//區(qū)別uniontydepefunion的地址是要重值的typedefstruct_stuff{charname[4];intscore;}stuff;intmain(intargc,char*argv[]){//charp[8];void*p=malloc(8);//著了申請的是8個字char*cp(char*)p;//注意這里要記得型inti;for(i=0;i<8;i++)//注意這里只有8個cp[i]='a'+i;for(i=0;i<8;i++)printf("cp[i]=%d\n",cp[i]);short*sp=(short*)p;for(i=0;i<4;i++)sp[i]='a'+i;for(i=0;i<4;i++)//注意這里只有4個printf("sp[i]=%d\n",sp[i]);stuff*op=(stuff*)p;strcpy(op,"china");//注意給/0好了op->score=100;printf("%d,%s\n",op->score,op);printf("HelloWorld!\n");return0;}范圍計算類型位數(shù)(32位機)符號范圍科學計數(shù)char8unsigned0-2550-28-1[signed]-128-+127-27-+27-1short16unsigned0-655350-216-1[signed]-32768-+32767-215-+215-1int32unsigned0-232-1[signed]-231-+231-1long32unsigned0-232-1[signed]-231-+231-1longlong64unsigned0-264-1[signed]-263-+263-1類型位數(shù)(32位機)范圍簡算精算有效位數(shù)float32[2-128,2127][10-38,1038]6-7[-2127,-2-128][-1038,-10-38]6-7double64[2-2048,22047][10-308,10308]15-16[-22047,-2-2048][-10308,-10-308]15-16數(shù)據(jù)類型是對內(nèi)存的格式化數(shù)據(jù)類型提供了,申請內(nèi)存單元的大小和訪問規(guī)則。數(shù)據(jù)類型是架設在線性內(nèi)存上的一種邏輯關系。#include<stdio.h>intmain()#include<stdio.h>intmain(){chara=0xff;printf("%d\n",a);unsignedb=0xff;printf("%u\n",b);return0;}#include<stdio.h>#include<stdlib.h>#include<stdio.h>#include<stdlib.h>typedefstruct_stutypedefstruct_stu{charsex;shortage;intscore;}Stu;typedefunion_un{charname[8];charsex;doublescore;}Un;intmain(intargc,char*argv[]){void*p=malloc(8);//以char*8的方式理解char*cp=(char*)p;for(inti=0;i<8i++){cp[i]='a'+i;}for(inti=0;i<8;i++){printf("cp[%d]=%c\n",i,cp[i]);}//以short*4的方式理解short*sp=(short*)p;for(inti=0;i<4i++){sp[i]=100+i;}for(inti=0;i<4;i++){printf("sp[%d]=%d\n",i,sp[i]);}需要倆次輸出,因為union空間會被覆蓋需要倆次輸出,因為union空間會被覆蓋////以int*2的方式理解int*ip=(int*)p;for(inti=0;i<2i++){ip[i]=100+i;}for(inti=0;i<2;i++){printf("ip[%d]=%d\n",i,ip[i]);}//以float*2的方式理解float*fp=(float*)p;for(inti=0;i<2i++){fp[i]=100.12344+i;}for(inti=0;i<2;i++){printf("fp[%d]=%.4f\n",i,fp[i]);}//以doube*的方式理解double*dp=(double*)p;*dp=0.12345;printf("double*fp=%.6f\n",*dp);Stu*stp=(Stu*)p;stp->sex='x';stp->age=24;stp->score=100;printf("sex=%cage=%dacore=%d\n",stp->sex,stp->age,stp->score);Un*up=(Un*)p;strcpy(up->name,"china");printf("name=%s\n",up->name);up->sex='x';printf("sex=%c\n",up->sex);up->score=1234.1234;Administrator2020-02-1107:54:36Administrator2020-02-1107:54:36#include<stdio.h>//大數(shù)據(jù)賦給小變量,低位字節(jié)對齊,可能會發(fā)生數(shù)據(jù)丟失//小數(shù)據(jù)賦給大變量不會intmain(intargc,char*argv[]){inta=0xff;//00000000000000000000000011111111charb=a;//11111111printf("%d\n",b);//-1intaa=256;charbb=aa;printf("%d\n",bb);//0//00000000000000000000000100000000printf("HelloWorld!\n");//00000000return0;}printf("score=%f\n",up->score);printf("score=%f\n",up->score);return0;}類型轉(zhuǎn)化類型轉(zhuǎn)化的原理小數(shù)據(jù)賦給大變量不會造成數(shù)據(jù)的丟失,系統(tǒng)為了保證數(shù)據(jù)的完整性,還提供了符號擴充行為。#include<stdio.h>intmain(void)#include<stdio.h>intmain(void){chara=0xFF;//a0x7f 16進制數(shù)據(jù)是不能表示正負的intb=a;printf("%d\n",b);return0;}大數(shù)據(jù)賦給小變量會發(fā)生Truncate(截斷行為),有可能會造成數(shù)據(jù)丟失。#include<stdio.h>intmain(void)#include<stdio.h>intmain(void){inta=0xff;//a=256;charb=a;printf("%d\n",b);return0;charb=a;printf("%d\n",b);return0;}隱式轉(zhuǎn)化整型提升323232位的整型數(shù)據(jù),然后才參與運算?;旌咸嵘鼺irst,ifeitheroperandislongdouble,theotherisconvertedtolongdouble.Otherwise,ifeitheroperandisdouble,theotherisconvertedtodouble.Otherwise,ifeitheroperandisfloat,theotherisconvertedtofloat.Otherwise,theintegralpromotionsareperformedonbothoperands;Otherwise,ifeitheroperandisunsignedint,theotherisconvertedtounsigned會轉(zhuǎn)變?yōu)閡nsignedintOtherwise,bothoperandshavetypeintint會轉(zhuǎn)變?yōu)閡nsignedintintmain(void)intmain(void){unsignedinta=1;intb=-100;printf("a+b=%u\n",a+b);return0;}顯示(強制類型)轉(zhuǎn)化inta=7;intb=3;inta=7;intb=3;floatc=(float)a/b練習#include<stdio.h>下面的代碼輸出什么?#include<stdio.h>255(到/0的位置).給大數(shù)據(jù)255(到/0的位置).給大數(shù)據(jù)Administrator2020-02-1108:41:08#include<stdio.h>voiddisBin(intd)照妖鏡{inti=32;while(i--){if((1<<i)&d)printf("1");elseprintf("0");if(!(i%8))putchar('');}putchar(10);}intmain(intargc,char*argv[]){inti;for(i=0;i<300;i++){disBin(-i);}return0;}voidfoo(void)voidfoo(void){unsignedinta=6;intb=-20;(a+b>6)?puts(">6"):puts("<=6");}intmain(){foo();return0;}#include<stdio.h>#include<string.h>intmain(){chara[1000];inti;for(i=0;i<1000;i++){a[i]=-1-i;#include<stdio.h>#include<string.h>intmain(){chara[1000];inti;for(i=0;i<1000;i++){a[i]=-1-i;}printf("%d\n",strlen(a));return0;}進程空間(ProgramSpace)進程空間進程/程序程序源文件經(jīng)編譯器,編譯后的可執(zhí)行文件。程序是一個靜態(tài)的概念。程序中包含2個區(qū)域,分別是:text/initialdata進程進程,被操作系統(tǒng)加載至運行結(jié)束的過程。進程是一個動態(tài)的概念。進程包含5個區(qū)域,分別是:text/initialdata/uninitialdata/heap/stack進程到程序--PAGE32-mmummu硬盤數(shù)據(jù) 虛擬內(nèi)存systemargsenvstackheap硬盤數(shù)據(jù)虛擬內(nèi)存systemargsenvstackheapbssdata(ro/rw)text內(nèi)存管理內(nèi)存textdata(ro/rw)數(shù)據(jù)在進程空間的存儲textdata(ro/rw)示意圖數(shù)據(jù)在進程空間#include<stdio.h>#include<stdio.h>inta;staticintinta;staticintb;intc=4;staticintd=6;intmain(void){intarray[10]={0,1,2,3,4,5,6,7,8,9,10};char*p="china";intvar=5;staticints=6;func();return0;}voidfunc(){staticintsi;intvar;}函數(shù)的壓棧與出棧普通函數(shù)auto類型的大將軍變量,隨用隨消時怎么會事呢?今天就通過,函數(shù)壓棧與出棧的操作,來給大家演示。#include<stdio.h>#include<stdio.h>voidswap(inta,intb){inttmp=a;a=b;b=tmp;}intmain(){{intm=5;intn=6;swap(m,n);return0;}#include<stdio.h>intgetAge(intn){if(n==5)return2;elsereturngetAge(n+1)+2;#include<stdio.h>intgetAge(intn){if(n==5)return2;elsereturngetAge(n+1)+2;}intmain(void){intage=getAge(1);printf("age=%d\n",age);return0;}如下程序中數(shù)據(jù)存儲在哪里#include<stdio.h>char*fa(){#include<stdio.h>char*fa(){char*pa="123456";//pa指針在棧區(qū),"123456”在常量區(qū),該函數(shù)調(diào)用完后指針變量pa就被釋放了char*p=NULL;//p4字節(jié)p=(char*)malloc(100);//本函數(shù)在這里開辟了一塊堆區(qū)的內(nèi)存空間,并把地址賦值給pstrcpy(p,"wudunxiong1234566");////把常量區(qū)的字符串拷貝到堆區(qū)returnp;//fb(),相對fafb是主調(diào)函數(shù),相對main來說,//fa(),fb()都是被調(diào)用函數(shù)}char*fb(){char*pstr=NULL;pstr=fa();returnpstr;//pstr在這就結(jié)束}voidmain(){char*str=NULL;str=fb();printf("str=%s\n",str);free(str);//防止內(nèi)存泄露,被調(diào)函數(shù)fa()分配的內(nèi)存存的值通過返回值傳給主調(diào)函數(shù),//然后主調(diào)函數(shù)釋放內(nèi)存str=NULL;//防止產(chǎn)生野指針return0;}dtttdttt){if(i!=len-1)reverseArr(parr,i+1,len);printf("%d\n",parr[i]);}intmain(){intarr[10]={1,2,3,4,5,6,7,8,9,10};reverseArr(arr,0,10);return0;}數(shù)組一維數(shù)組本質(zhì)范圍數(shù)組是用于存儲相同數(shù)據(jù)類型數(shù)據(jù),且在內(nèi)存空間連續(xù)的一種數(shù)據(jù)結(jié)構(gòu)類型。數(shù)組三要素。范圍步長類型:類型:type[N]定義:typename[N]大?。簊izeof(type[N])或sizeof(name)初始化intarray[10]={1,2,3};//部分初始化intarray[10]={1,2,3};//部分初始化intarray2[10]={[3]=10};intarray1[10]={0};//清零arr[n]==*(arr+n)找清楚這里面的邏輯arr[n]==*(arr+n)找清楚這里面的邏輯intarray3[10]={1,2,3,4,5,6,7,8,9,0,1,2};//intarray3[10]={1,2,3,4,5,6,7,8,9,0,1,2};//越界不檢訪問數(shù)組名是數(shù)組的唯一標識符,數(shù)組的每一個元素都是沒有名字的,必須依數(shù)組名來訪問。數(shù)據(jù)名有兩重含義:數(shù)組名作整體訪問注意這里跨一個數(shù)組的大小sizeof就大小,二是對數(shù)組取地址得到數(shù)組指針。注意這里跨一個數(shù)組的大小#include<stdio.h>#include<stdio.h>intmain(void){intarr[10]={1,2,3,4,5,6,7,8,9,0};//int[10]arr;printf("sizeof(arr)=%d\n",sizeof(arr));printf("&arr =%p\n",&arr);printf("&arr+1=%p\n",&arr+1);int(*pa)[10]=&arr;printf("pa =%p\n",pa);printf("pa+1=%p\n",pa+1);return0;}數(shù)組指針,也是跨一個數(shù)組的大小數(shù)組名作起始地址訪問成員數(shù)組指針,也是跨一個數(shù)組的大小name[i]==*(name+i)==i[name]#include<stdio.h>name[i]==*(name+i)==i[name]#include<stdio.h>intmain(void){intarr[10]={1,2,3,4,5,6,7,8,9,0};printf("arr[0] =%d\n",arr[0]);printf("*(arr+0)=%d\n",*(arr+0));printf("arr =%p\n",arr);printf("arr+1=%p\n",arr+1);printf("&arr[0]printf("&arr[0] =%p\n",&arr[0]);printf("&arr[0]+1=%p\n",&arr[0]+1);return0;}作參數(shù)傳遞(intarr[10],intn)本質(zhì)是一樣的(首地址,類型,大?。┳鲄?shù)傳遞,旨在傳遞三要素。(intarr[10],intn)本質(zhì)是一樣的(首地址,類型,大?。?include<stdio.h>#include<stdio.h>voidselectSort(int*p,intn){for(inti=0;i<n-1;i++){for(intj=i+1;j<n;j++){if(p[i]>p[j]){p[i]^=p[j];p[j]^=p[i];p[i]^=p[j];}}}}intmain(){intarray[10]={9,8,7,6,5,4,3,2,1,0};selectSort(array,10);for(inti=0;i<10;i++){printf("%d\n",array[i]);}return0;}解引用,(char*)是因為main里的是char*Administrator2020-02-1203:30:14解引用,(char*)是因為main里的是char*Administrator2020-02-1203:30:14intgetMem(char**p,intn){*p=(char*)malloc(n);//這里的*p是地if(*p==NULL)//來改變值return-1;elsereturn0;}intmain(intargc,char*argv[]){char*q;//這里指向的空間是未知的intret;retgetMem(&q,100);//注意這里的*q&q,這里的*q是沒有初始化的,if(!ret)strcpy(q,"china");printf("%s\n",q);return0;}返回堆中一維數(shù)組棧上的空間不能返回,堆上的可以返回返回值返回(一級指針)棧上的空間不能返回,堆上的可以返回char*allocMem(intn)char*allocMem(intn){char*p=(char*)malloc(n);returnp;}通過改變地址內(nèi)的內(nèi)容來改變值,再傳回去參數(shù)返回(二級指針)通過改變地址內(nèi)的內(nèi)容來改變值,再傳回去#include<stdio.h>#include<string.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<stdlib.h>intallocMem(char**p,intn){*p=(char*)malloc(n);return*p==NULL?-1:1;}intmain(void){char*p;if(allocMem(&p,100)<0)return-1;strcpy(p,"china");printf("%s\n",p);free(p);return0;}練習合并有序數(shù)組使其依然有序現(xiàn)在數(shù)組inta[3]={1,3,5}; intb[5]={2,4,6,8,10}; 合并到 intc[8]中去使其依有序。#include<stdio.h>#include<string.h>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(void){{inta[3]={1,3,5};intb[5]={2,5,6,8,10};intc[8];inti=0,j=0,k=0;while(i<3&&j<5){if(a[i]<b[j])c[k++]=a[i++];else(a[i]>b[j])c[k++]=b[j++];if(i==3){while(j<5)c[k++]=b[j++];}if(j==5){while(i<3)c[k++]=a[i++];}for(inti=0;i<8;i++){printf("%d\n",c[i]);}return0;}求最值#include<stdio.h>#include<stdio.h>intmain(void){intarr[10]={1,2,3,10,9,6,7};intmax=arr[0];for(inti=0;i<10;i++){if(max<arr[i])max=arr[i];}}printf("max=%d\n",max);return0;}求次最值intmain(intargc,char*argv[])intmain(intargc,char*argv[]){intarr[10]={94,73,6,77,94,65,54,94,58,71};for(inti=0;i<10;i++){printf("%d\t",arr[i]);}putchar(10);intmax,subm;arr[0]>arr[1]?(max=arr[0],subm=arr[1]):(max=arr[1],subm=arr[0]);for(inti=2;i<10;i++){if(arr[i]>max){subm=max;max=arr[i];}elseif(arr[i]>subm&&arr[i]!=max)//105 10{subm=arr[i];}}printf("max=%dsubm=%d\n",max,subm);return0;}這樣作可以了嗎?能不能舉出反例? 10 10 5求次最值(改進)#include<stdio.h>#include<stdio.h>intsecondMaxOfArray(int*p,intn)intsecondMaxOfArray(int*p,intn){intmax,subm;max=subm=*p;for(inti=1;i<n;i++){if(p[i]>max){subm=max;max=p[i];}else{if(p[i]<max&&p[i]>subm||max==subm){subm=p[i];}}}returnsubm;}intmain(){intarr[]={10,10,1,4};intsubm=secondMaxOfArray(arr,4);printf("subm=%d\n",subm);return0;}二維數(shù)組本質(zhì)范圍二維數(shù)組的本質(zhì)是一維數(shù)組,只不過,一維數(shù)組的成員又是一個一維數(shù)組而己。一維數(shù)組三要素同樣適用:范圍步長起始地址typename[M][N]==type[N]name[M]inttypename[M][N]==type[N]name[M]intarr[3][4] ==int[4]arr[3]初始化行可以省,列不可以省,部分初始化和清零依然適用行可以省,列不可以省,部分初始化和清零依然適用intarray[2][3]={[1][2]=3};//c99訪問數(shù)組名,是數(shù)組的唯一標識符。數(shù)組名作為整體訪問#include<stdio.h>intmain(void)#include<stdio.h>intmain(void){intarr[3];//int[3]intarr[3];//int[3]arr;printf("sizeof(arr)=%dsizeof(int[3])=%d\n",sizeof(arr),sizeof(int[3]));printf("&arr =%p\n",&arr);printf("&arr+1=%p\n",&arr+1);intarray[3][4];//int[4]array[3] typearray[3]; type[3]array;printf("sizeof(array)=%dsizeof(int[3][4])=%d\n",sizeof(array),sizeof(int[3][4]));printf("&array =%p\n",&array);printf("&array+1=%p\n",&array+1);return0;}數(shù)組名作起始地址訪問成員aa[i]a[i][j]的。#include<stdio.h>intmain(void){#include<stdio.h>intmain(void){intarray[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};printf("array =%p\n",array);printf("array+1=%p\n",array+1);Administrator2020-03-0713:31:00Administrator2020-03-0713:31:00#include<stdio.h>intmain(intargc,char*argv[]){charv[5][10]=}//**(v+3)=*(*(v+3)+0)//v[1]+1表示數(shù)組v下標1開始字符串,即bcd//efg,h,z,q,bcdprintf("array[0]printf("array[0] =%p\n",array[0]);printf("array[0]+1=%p\n",array[0]+1);printf("*(array[0]+1)=%d\n",*(array[0]+1));//*(a+1)a[1]printf("*(array[0]+1)=%d\n",array[0][1]);//如何array過度到array[0]printf("*array =%p\n",*array);printf("*array+1 =%p\n",*array+1);printf("array[0]+1=%p\n",array[0]+1);return0;}結(jié)論*(a+i), a[i],*(a+i)+j, a[i]+j*(a+i), a[i],*(a+i)+j, a[i]+j,*(*(a+i)+j) *(a[i]+j),&a[i][0]i0個元素地址&a[i][j]ij個元素地址a[i][j]ij個元素線性存儲二維數(shù)組在邏輯上是二維的,但是在存儲上卻是一維的。正是這個特點,也可以用一維數(shù)組的方式去訪問二維數(shù)組的。#include<stdio.h>intmain()#include<stdio.h>intmain(){intarray[2][3]={9,8,7,6,5,4};for(inti=0;i<2;i++){for(intj=0;j<3;j++){printf("%d",array[i][j]);}putchar(10);}int*p=(int*)array;for(inti=0;i<6;i++){printf("%d",p[i]);}//int[4]arry[3]typearr[3]//int[4]*pint*p[4]int(*p)[4]//int[4]arry[3]typearr[3]//int[4]*pint*p[4]int(*p)[4]Administrator2020-03-1815:16:22#include<stdio.h>voidfoo(int(*p)[4],intn){inti,j;for(i=0;i<n;i++){for(j=0;j<4;j++)printf("%d\n",p[i][j]);}putchar(10);}intmain(intargc,char*argv[]){intarry[3][4]=typearr[3]//int[4]*pint(*p)[4]foo(arry,3);//因為arr+1的范圍是3個printf("HelloWorld!\n");return0;}return0;return0;}作參數(shù)傳遞二維數(shù)組本質(zhì)是常量數(shù)組指針,所以跟其對應的形參也應該是數(shù)組指針類型的變量。voiddisplayArray(voiddisplayArray(int(*p)[4],intn){f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度光伏發(fā)電站投資建設與運營承包合同樣本3篇
- 2025年高校學生宿舍托管租賃服務合同范本3篇
- 二零二五年籃球運動場地照明節(jié)能改造合同2篇
- 四川省自貢市2024-2025學年八年級上學期期末考試道德與法治試題(含答案)
- 2025版圍擋安裝勞務分包合同范本(含氣候影響調(diào)整)2篇
- 《漿細胞白血病》課件
- 外幣存款利率的市場預測考核試卷
- 城市公共交通系統(tǒng)的創(chuàng)新與改進考核試卷
- 《明代的政治與制度》課件
- 二零二五年度木雕工藝品出口退稅與稅收籌劃合同4篇
- 山東鐵投集團招聘筆試沖刺題2025
- 真需求-打開商業(yè)世界的萬能鑰匙
- 2025年天津市政集團公司招聘筆試參考題庫含答案解析
- GB/T 44953-2024雷電災害調(diào)查技術規(guī)范
- 2024-2025學年度第一學期三年級語文寒假作業(yè)第三天
- 2024年列車員技能競賽理論考試題庫500題(含答案)
- 心律失常介入治療
- 6S精益實戰(zhàn)手冊
- 展會場館保潔管理服務方案
- 監(jiān)理從業(yè)水平培訓課件
- 廣東省惠州市實驗中學2025屆物理高二第一學期期末綜合測試試題含解析
評論
0/150
提交評論