版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C語言考研復(fù)習(xí)11基本語法2數(shù)據(jù)類型3程序設(shè)計(一)基本數(shù)據(jù)類型與表達(dá)式1基本數(shù)據(jù)類型2常量與變量3運算符與表達(dá)式4輸入與輸出(二)復(fù)雜數(shù)據(jù)類型1數(shù)組與字符串2指針與引用3結(jié)構(gòu)體4文件(三)結(jié)構(gòu)化程序設(shè)計1三種控制結(jié)構(gòu)2函數(shù)3指針鏈表4編程練習(xí)
數(shù)據(jù)類型常量與變量運算符與表達(dá)式4類型轉(zhuǎn)換
1基本數(shù)據(jù)類型與表達(dá)式
1數(shù)據(jù)類型?C語言提供的數(shù)據(jù)類型
數(shù)據(jù)類型構(gòu)造類型指針類型空類型(無值類型)void枚舉類型enum數(shù)組類型結(jié)構(gòu)類型struct聯(lián)合類型
union基本類型整型int字符型char實型(浮點型)單精度實型
float雙精度實型
double整數(shù)類型的數(shù)的表示范圍類型類型說明符長度數(shù)的范圍基本型int4字節(jié)-231~231-1(2147483647)短整型short2字節(jié)-215~215-1(32767)長整型long4字節(jié)-231~231-1(2147483647)無符號整型unsigned4字節(jié)-231~231-1(2147483647)無符號短整型unsignedshort2字節(jié)0~65535(216-1)無符號長整型unsignedlong4字節(jié)0~(232-1)
整數(shù)類型
2常量與變量?常量
在程序運行過程中,其值不能被改變的量稱為常量。?變量在程序運行期間,這些值是可以改變的。
變量名實際上是一個以一個名字對應(yīng)代表一個地址。從變量中取值,實際上是從該存儲單元中讀取數(shù)據(jù)。?要求對所有用到的變量作強制定義,也就是“先定義,后使用”
標(biāo)識符?標(biāo)識符變量命名的規(guī)定:C語言規(guī)定標(biāo)識符只能由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。
例:sum,_total,month,Student_name,
lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,a>b
例如:整數(shù)13在內(nèi)存中實際存放的情況:
整型數(shù)據(jù)
實型數(shù)據(jù)1、浮點型實型常量的表示方法兩種表示形式小數(shù)指數(shù)0.1233e-3注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù)1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e
2、規(guī)范化的指數(shù)形式:
在字母e(或E)之前的小數(shù)部分中,小數(shù)點左邊應(yīng)有一位(且只能有一位)非零的數(shù)字.
例如:123.456可以表示為:
123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e
其中的1.23456e3稱為“規(guī)范化的指數(shù)形式”。
實型數(shù)據(jù)3、浮點型數(shù)據(jù)在內(nèi)存中的存放形式
一個浮點型數(shù)據(jù)一般在內(nèi)存中占4個字節(jié)(32位)。與整型數(shù)據(jù)的存儲方式不同,浮點型數(shù)據(jù)是按照指數(shù)形式存儲的。系統(tǒng)把一個浮點型數(shù)據(jù)分成小數(shù)部分和指數(shù)部分,分別存放。指數(shù)部分采用規(guī)范化的指數(shù)形式。
實型數(shù)據(jù)1字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符例‘a(chǎn)’,’A’,‘1’‘a(chǎn)bc’、“a”字符型數(shù)據(jù)
字符型數(shù)據(jù)
?有些以“\”開頭的特殊字符稱為轉(zhuǎn)義字符\n換行\(zhòng)t橫向跳格\r回車\\反斜杠\dddddd表示1到3位八進(jìn)制數(shù)字\xhhhh表示1到2位十六進(jìn)制數(shù)字2字符變量字符型變量用來存放字符常量,注意只能放一個字符。字符變量的定義形式如下:charc1,c2;在本函數(shù)中可以用下面語句對c1,c2賦值:
c1=`a`;c2=`b`;一個字符變量在內(nèi)存中占一個字節(jié)。
字符型數(shù)據(jù)
?字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII代碼放到存儲單元中。
?這樣使字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用。一個字符數(shù)據(jù)既可以以字符形式輸出,也可以以整數(shù)形式輸出。字符型數(shù)據(jù)
4字符串常量字符串常量是一對雙撇號括起來的字符序列.合法的字符串常量:
“Howdoyoudo.”,“CHINA”,“a”
,“$123.45”可以輸出一個字符串,如
printf(“Howdoyoudo.”);字符型數(shù)據(jù)
‘a’是字符常量,”a”是字符串常量,二者不同。
如:假設(shè)C被指定為字符變量
:charcc=’a’;
c=”a”;c=”CHINA”;
結(jié)論:不能把一個字符串常量賦給一個字符變量。字符型數(shù)據(jù)
C規(guī)定:在每一個字符串常量的結(jié)尾加一個“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符`\0`作為字符串結(jié)束標(biāo)志。
如:如果有一個字符串常量”CHINA”,實際上在內(nèi)存中是:CHINA\0
它占內(nèi)存單元不是5個字符,而是6個字符,最后一個字符為’\0’。但在輸出時不輸出’\0’。字符型數(shù)據(jù)
符號常量(需要先宏定義)#definePI3.141592#definePRICE100說明:宏定義行末不能用”;”
符號常量中的值只能引用,不允許修改.如:PI=2.718Y=PI*5符號常量
常變量const,也稱為只讀變量?定義常變量同時應(yīng)初始化,值不再改變。如:constinta=3;constinta;
a=3;?也可以用表達(dá)式對常變量初始化。注意:#define只是替換,無類型,無存儲
const是變量,有類型,有存儲,值不變,可以用sizeof運算符。
常變量
變量賦初值(1)C語言允許在定義變量的同時使變量初始化。(2)可以使被定義的變量的一部分賦初值。如:inta=3;//指定a為整型變量,初值為3inta,b,c=5;(3)如果對幾個變量賦以同一個初值,應(yīng)寫成:inta=3,b=3,c=3;不能寫成∶
inta=b=c=3;注意:初始化不是在編譯階段完成,而是在程序運行時執(zhí)行完成,相當(dāng)于有一個賦值語句。1算術(shù)表達(dá)式
2賦值表達(dá)式
3逗號表達(dá)式4關(guān)系表達(dá)式
條件表達(dá)式邏輯表達(dá)式
3
運算符與表達(dá)式
C運算符1C運算符簡介
C的運算符有以下幾類:(1)算術(shù)運算符(+-*/%++--)(2)關(guān)系運算符(><==>=<=
!=)(3)邏輯運算符(?。Γ|)(4)位運算符(<<>>&|~∧)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)(7)逗號運算符(,)(8)指針運算符(*和&)(9)求字節(jié)數(shù)運算符(sizeof)(10)強制類型轉(zhuǎn)換運算符((類型))(11)分量運算符(.->)(12)下標(biāo)運算符([])(13)其他(如函數(shù)調(diào)用運算符())
C運算符(1)基本的算術(shù)運算符+(加法運算符.如:3+5、+3)-(減法運算符.如:5-2、-3)*(乘法運算符.如:3*5)/(除法運算符.如:5/3)%(模運算符,或稱求余運算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如:7%4的值為3)。
算術(shù)運算符和算術(shù)表達(dá)式(2)算術(shù)表達(dá)式
用算術(shù)運算符和括號將運算對象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,稱為C算術(shù)表達(dá)式。(3)算術(shù)運算符的結(jié)合性
算術(shù)運算符的結(jié)合方向為“自左至右”,即先左后右。
算術(shù)運算符和算術(shù)表達(dá)式(4)
自增、自減運算符
作用是使變量的值增1或減1++i,--i(在使用i之前,先使i的值加(減)1)i++,i--(在使用i之后,使i的值加(減)1)自增(減)運算符常用于循環(huán)語句中使循環(huán)變量自動加1。也用于指針變量,使指針指向下一個地址
算術(shù)運算符和算術(shù)表達(dá)式注意:
(1)自增運算符(++),自減運算符(--),只能用于變量,而不能用于常量或表達(dá)式,
(2)++和--的結(jié)合方向是“自右至左”例如:inti=3;printf(“%d,%d”,-i++,i);輸出:-3,3。
算術(shù)運算符和算術(shù)表達(dá)式Example:W/Z實數(shù)(浮點數(shù))除法整數(shù)除法
算術(shù)運算符和算術(shù)表達(dá)式Example:anintegeraninteger
theresultisalsoaninteger11/5=2
算術(shù)運算符和算術(shù)表達(dá)式Example:11.0/5=2.2afloatanintegertheresultisafloat
算術(shù)運算符和算術(shù)表達(dá)式Example:11%5=1anintegeranintegertheresultistheremainderof11/51152101remainderresult
算術(shù)運算符和算術(shù)表達(dá)式Example:-11%5=-1anintegeraninteger-115-2-10-1remainderresulttheresultistheremainderof-11/5
算術(shù)運算符和算術(shù)表達(dá)式Example:11%-5=1anintegeraninteger11-5-2101remainderresulttheresultistheremainderof11/-5
算術(shù)運算符和算術(shù)表達(dá)式Example:-11%-5=-1anintegeraninteger-11-52-10-1remainderresulttheresultistheremainderof11/-5
算術(shù)運算符和算術(shù)表達(dá)式Example:11.0%5=?afloatanintegerINVALID!
算術(shù)運算符和算術(shù)表達(dá)式
賦值運算符和賦值表達(dá)式
(1)賦值運算符
賦值符號“=”就是賦值運算符,它的作用是將一個數(shù)據(jù)賦給一個變量。(2)類型轉(zhuǎn)換
如果賦值運算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時,在賦值時要進(jìn)行類型轉(zhuǎn)換。(3)復(fù)合的賦值運算符
在賦值符“=”之前加上其他運算符,可以構(gòu)成復(fù)合的運算符。例如:a+=3等價于a=a+3x*=y+8等價于x=x*(y+8)x%=3等價于x=x%3
賦值運算符和賦值表達(dá)式
(4)賦值表達(dá)式
由賦值運算符將一個變量和一個表達(dá)式連接起來的式子稱為“賦值表達(dá)式”。一般形式為:
<變量><賦值運算符><表達(dá)式>
例如:“a=5”是一個賦值表達(dá)式
賦值運算符和賦值表達(dá)式
左值(lvalue)
:賦值運算符左側(cè)的標(biāo)識符變量可以作為左值;而表達(dá)式就不能作為左值(如a+b);常變量也不能作為左值,
右值(lvalue)
:出現(xiàn)在賦值運算符右側(cè)的表達(dá)式
左值也可以出現(xiàn)在賦值運算符右側(cè),因而左值都可以作為右值。
賦值運算符和賦值表達(dá)式
賦值表達(dá)式也可以包含復(fù)合的賦值運算符。
如:a+=a-=a*a分析:此賦值表達(dá)式的求解步驟如下∶①先進(jìn)行“a-=a*a”的運算,它相當(dāng)于a=a-a*a,a的值為12-144=-132。②再進(jìn)行“a+=-132”的運算,相當(dāng)于a=a+(-132),a的值為-132-132=-264。
賦值運算符和賦值表達(dá)式
逗號運算符和逗號表達(dá)式逗號運算符:一般形式:
表達(dá)式1,表達(dá)式2求解過程:先求解表達(dá)式1,再求解表達(dá)式2。整個逗號表達(dá)式的值是表達(dá)式2的值。逗號表達(dá)式的一般形式可以擴展為
表達(dá)式1,表達(dá)式2,表達(dá)式3,……,表達(dá)式n它的值為表達(dá)式n的值。逗號運算符是所有運算符中級別最低的。例:①x=(a=3,6*3)②x=a=3,6*3
例:逗號表達(dá)式a=3*5,a*4
分析:賦值運算符的優(yōu)先級別高于逗號運算符,因此應(yīng)先求解a=3*5.
一個逗號表達(dá)式又可以與另一個表達(dá)式組成一個新的逗號表達(dá)式如:(a=3*5,a*4),(a+5)先計算出a的值等于15,再進(jìn)行a*4的運算得60(但a值未變,仍為15),再進(jìn)行a+5得20,即整個表達(dá)式的值為20。
逗號運算符和逗號表達(dá)式
關(guān)系運算符和關(guān)系表達(dá)式(一).關(guān)系運算符及其優(yōu)先次序<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)優(yōu)先級相同(高)優(yōu)先級相同(低)說明:關(guān)系運算符的優(yōu)先級低于算術(shù)運算符關(guān)系運算符的優(yōu)先級高于賦值運算符(二).關(guān)系表達(dá)式用關(guān)系運算符將兩個表達(dá)式(可以是算術(shù)表達(dá)式或關(guān)系表達(dá)式,邏輯表達(dá)式,賦值表達(dá)式,字符表達(dá)式)接起來的式子,稱關(guān)系表達(dá)式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個邏輯值,即“真”或“假”。例:關(guān)系表達(dá)式”a>b”的值為“真”,表達(dá)式的值為1。
關(guān)系運算符和關(guān)系表達(dá)式(一).邏輯運算符及其優(yōu)先次序&&(邏輯與)相當(dāng)于其他語言中的AND||(邏輯或)相當(dāng)于其他語言中的OR!(邏輯非)相當(dāng)于其他語言中的NOT例:a&&b若a,b為真,則a&&b為真。
a||b若a,b之一為真,則a||b為真。!a若a為真,則!a為假。優(yōu)先次序:!(非)->&&()->||()邏輯運算符中的“&&”和“||”低于關(guān)系運算符,“!”高于算術(shù)運算符
邏輯運算符和邏輯表達(dá)式(二)邏輯表達(dá)式用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接起來的式子就是邏輯表達(dá)式邏輯表達(dá)式的值應(yīng)該是一個邏輯量“真”或“假”。例:設(shè)a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1
邏輯運算符和邏輯表達(dá)式例:5>3&&8<4-!0
自左向右運算
1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達(dá)式值為0
邏輯運算符和邏輯表達(dá)式在邏輯表達(dá)式的求解中,并不是所有的邏輯運算符都要被執(zhí)行。(1)a&&b&&c只有a為真時,才需要判斷b的值,只有a和b都為真時,才需要判斷c的值。(2)a||b||c只要a為真,就不必判斷b和c的值,只有a為假,才判斷b。a和b都為假才判斷c例:(m=a>b)&&(n=c>d)當(dāng)a=1,b=2,c=3,d=4,m和n的原值為1時,由于“a>b”的值為0,因此m=0,而“n=c>d”不被執(zhí)行,因此n的值不是0而仍保持原值1。
邏輯運算符和邏輯表達(dá)式
位運算符和位運算運算符含義運算符含義
&按位與~取反
|按位或
<<左移∧按位異或
>>右移(1)位運算符中除~以外,均為二目(元)運算符,即要求兩側(cè)各有一個運算量。(2)運算量只能是整型或字符型的數(shù)據(jù),不能為實型數(shù)據(jù)。?C語言提供的位運算符有:
說明:按位與:參加運算的兩個數(shù)據(jù),按二進(jìn)制位進(jìn)行“與”運算。如果兩個相應(yīng)的二進(jìn)制位都為1,則該位的結(jié)果值為1;否則為0。即:0&0=0,0&1=0,1&0=0,1&1=1例:3&5并不等于8,應(yīng)該是按位與運算:注意:如果參加&運算的是負(fù)數(shù)(如-3&-5),則要以補碼形式表示為二進(jìn)制數(shù),然后再按位進(jìn)行“與”運算。
00000011(3)&
00000101(5)
00000001(1)
3&5的值得1
位運算符和位運算按位或:兩個相應(yīng)的二進(jìn)制位中只要有一個為1,該位的結(jié)果值為1。即0|0=0,0|1=1,1|0=1,1|1=1例:
060|017,將八進(jìn)制數(shù)60與八進(jìn)制數(shù)17進(jìn)行按位或運算。
00110000|
00001111
00111111
位運算符和位運算異或運算符∧也稱XOR運算符。它的規(guī)則是:若參加運算的兩個二進(jìn)制位同號則結(jié)果為0(假)
異號則結(jié)果為1(真)即:0∧0=0,0∧1=1,1∧0=1,1∧1=0即:071∧052=023(八進(jìn)制數(shù))
00111001∧
00101010
00010011
例:
位運算符和位運算
“取反”運算符~是一個單目(元)運算符,用來對一個二進(jìn)制數(shù)按位取反,即將0變1,將1變0。例如,~025是對八進(jìn)制數(shù)25(即二進(jìn)制數(shù)00010101)按位求反。0000000000010101(~)
1111111111101010(八進(jìn)制數(shù)177752)
位運算符和位運算
左移運算符<<是用來將一個數(shù)的各二進(jìn)制位全部左移若干位。例如:a=<<2
將a的二進(jìn)制數(shù)左移2位,右補0。若a=15,即二進(jìn)制數(shù)
00001111左移2位得
00111100(十進(jìn)制數(shù)60)
高位左移后溢出,舍棄。
位運算符和位運算右移運算符>>表示將各二進(jìn)制位右移2位,移到右端的低位被舍棄,對無符號數(shù),高位補0。例如:a=017時:
a的值用二進(jìn)制形式表示為00001111舍棄低2位11:a>>2=00000011右移一位相當(dāng)于除以2
右移n位相當(dāng)于除以2n。
位運算符和位運算在右移時,需要注意符號位問題:?
對無符號數(shù),右移時左邊高位移入0;?對于有符號的值,如果原來符號位為0(該數(shù)為正),則左邊也是移入0。如果符號位原來為1(即負(fù)數(shù)),則左邊移入0還是1,要取決于所用的計算機系統(tǒng)。?有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術(shù)右移”。
位運算符和位運算
位運算符與賦值運算符可以組成復(fù)合賦值運算符例如:&=,|=,>>=,<<=,∧=例:a&=b相當(dāng)于a=a&ba<<=2相當(dāng)于a=a<<2
位運算符和位運算Example:
intx=10; floaty; y=(float)x;
(float)10
10.000000x10y??10.000000強轉(zhuǎn)(Casting)可以消除從大到小的警告
通過下面方式把表達(dá)式的值轉(zhuǎn)為任意類型
(類型)表達(dá)式不改變x4強制類型轉(zhuǎn)換Example:
inttotal,number; floataverage; …
average=total/number;
15/2
7total15number2average??7.000000兩個整數(shù)運算的結(jié)果還是整數(shù),不是浮點數(shù)4強制類型轉(zhuǎn)換Example:
inttotal,number; floataverage; …
average=(float)total/number;
15.000000/2
7.500000total15number2average??7.5000004強制類型轉(zhuǎn)換Sizeof運算符?C語言的關(guān)鍵字,并非函數(shù)?兩種語法形式sizeof(類型)結(jié)果為類型占用的字節(jié)數(shù)sizeof(表達(dá)式)結(jié)果為表達(dá)式值所屬類型占用的字節(jié)數(shù)一般都使用sizeof(變量名)
相同類型數(shù)據(jù)的運算結(jié)果,還是該類型不同類型數(shù)據(jù)的運算結(jié)果,是兩種類型中取值范圍大的那種long
double>double>float>long>int>short>chardoublefloatlongunsignedintchar,short低高各類數(shù)值型數(shù)據(jù)間的混合運算取值范圍小的類型賦值給取值范圍大的類型是安全的反之是不安全的若大類型的值在小類型能容納的范圍之內(nèi),則平安無事但是浮點數(shù)轉(zhuǎn)為整數(shù),會丟失小數(shù)部分,而非四舍五入各類數(shù)值型數(shù)據(jù)間的混合運算下面程序演示了賦值中的類型轉(zhuǎn)換各類數(shù)值型數(shù)據(jù)間的混合運算m/2=2(float)(m/2)=2.000000(float)m/2=2.500000m=5各類數(shù)值型數(shù)據(jù)間的混合運算1字符數(shù)據(jù)輸入
2字符數(shù)據(jù)輸出
3格式輸入4格式輸出
4輸入與輸出字符數(shù)據(jù)輸出?字符輸出函數(shù)一般形式:putchar(c)
函數(shù)作用:向終端輸出一個字符
?字符輸入函數(shù)一般形式:getchar()
函數(shù)作用:從終端輸入一個字符。函數(shù)值:從輸入設(shè)備得到的字符。字符數(shù)據(jù)輸入格式輸出(一)格式輸出函數(shù)函數(shù)作用:向終端輸出若干個任意類型的數(shù)據(jù)。一般格式:printf(格式控制,輸出表列)%d:以帶符號的十進(jìn)制形式輸出整數(shù)%o:以八進(jìn)制無符號形式輸出整數(shù)%x:以十六進(jìn)制無符號形式輸出整數(shù)(1)d格式符。用來輸出十進(jìn)制整數(shù)。(2)
o格式符。以八進(jìn)制整數(shù)形式輸出。輸出的數(shù)值不帶符號,符號位也一起作為八進(jìn)制數(shù)的一部分輸出。(3)x格式符。以十六進(jìn)制數(shù)形式輸出整數(shù)。同樣不會出現(xiàn)負(fù)的十六進(jìn)制數(shù)。(4)u格式符
用來輸出unsigned型數(shù)據(jù).(5)c格式符,用來輸出一個字符。(6)s格式符輸出字符串.(7)f格式符。用來以小數(shù)形式輸出實數(shù)
格式輸出(二)格式輸入函數(shù)函數(shù)作用:按照變量在內(nèi)存的地址將變量值存進(jìn)去。一般格式:scanf(格式控制,地址表列)格式輸入
使用scanf函數(shù)時應(yīng)注意的問題
:(1)scanf函數(shù)中的“格式控制”后面應(yīng)當(dāng)是變量
地址,而不應(yīng)是變量名。(2)如果在“格式控制”字符串中除了格式說明以外
還有其他字符,則在輸入數(shù)據(jù)時在對應(yīng)位置應(yīng)輸入
與這些字符相同的字符。(3)在用“%c”格式輸入字符時,空格字符和“轉(zhuǎn)義
字符”都作為有效字符輸入(4)在輸入數(shù)據(jù)時,遇以下情況時認(rèn)為該數(shù)據(jù)結(jié)束。①遇空格,或按“回車”或“跳格”(Tab)鍵;②按指定的寬度結(jié)束,如“%3d”,只?。沉?;③遇非法輸入。格式輸入(二)復(fù)雜數(shù)據(jù)類型1數(shù)組與字符串2指針3結(jié)構(gòu)體4文件1一維數(shù)組
2二維數(shù)組
3字符數(shù)組
1數(shù)組與字符串
1、一維數(shù)組的定義格式為:類型說明符數(shù)組名[常量表達(dá)式];例如:inta[10];
它表示定義了一個整形數(shù)組,數(shù)組名為a,此數(shù)組有10個元素。注意:
在定義數(shù)組時,需要指定數(shù)組中元素的個數(shù),方括弧中的常量表達(dá)式用來表示元素的個數(shù),即數(shù)組長度。常量表達(dá)式中可以包括常量和符號常量,但不能包含變量。
一維數(shù)組
①floata[0];
/*數(shù)組大小為0沒有意義*/
②intb(2)(3);
/*不能使用圓括號*/
③intk,a[k];
/*不能用變量說明數(shù)組大小*/
數(shù)組說明中其他常見的錯誤
一維數(shù)組一維數(shù)組:float
mark[100];mark[0]mark[1]mark[2]mark[3]...mark[99]86.592.077.552.0...94.0低地址
高地址
一維數(shù)組數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式。例如:a[0]=a[5]+a[7]-a[2*3]1、數(shù)組元素的引用方式:
一維數(shù)組2、對數(shù)組元素初始化
(1)在定義數(shù)組時對數(shù)組元素賦以初值。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};將數(shù)組元素的初值依次放在一對花括弧內(nèi)。經(jīng)過上面的定義和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。
一維數(shù)組
(3)如果想使一個數(shù)組中全部元素值為0,可以寫成
inta[10]={0,0,0,0,0,0,0,0,
0,0};或inta[10]={0};
不能寫成:inta[10]={0*10};
(2)可以只給一部分元素賦值。例如:inta[10]={0,1,2,3,4};
定義a數(shù)組有10個元素,但花括弧內(nèi)只提供5個初值,這表示只給前面5個元素賦初值,后5個元素值為0。
一維數(shù)組(4)在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。
例如:inta[5]={1,2,3,4,5};
也可以寫成
inta[]={1,2,3,4,5};
一維數(shù)組二維數(shù)組的定義二維數(shù)組定義的一般形式為類型說明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];floata[3][4],b[5][10];不能寫成
floata[3,4],b[5,10];
二維數(shù)組我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個一維數(shù)組。例如,可以把a看作是一個一維數(shù)組,它有3個元素:a[0]、a[1]、a[2],每個元素又是一個包含4個元素的一維數(shù)組。
二維數(shù)組
二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素…
二維數(shù)組在內(nèi)存中的存放下圖表示對a[3][4]數(shù)組存放的順序
二維數(shù)組地址
值
數(shù)組元素b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2]3000H3002H3004H3006H3008H300AH300CH300EH3010H例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};123456789二維數(shù)組元素的表示形式為:數(shù)組名[下標(biāo)][下標(biāo)]
例如:a[2][3]下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1]不要寫成a[2,3],a[2-1,2*2-1]形式
二維數(shù)組常出現(xiàn)的錯誤有:
inta[3][4];
/*定義a為3×4的數(shù)組*/
┆a[3][4]=3;
在使用數(shù)組元素時,應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。
二維數(shù)組用下面4種方法對二維數(shù)組初始化(1)
分行給二維數(shù)組賦初值。如:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)
可以將所有數(shù)據(jù)寫在一個花括弧內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
二維數(shù)組(3)
可以對部分元素賦初值。如
inta[3][4]={{1},{5},{9}};
100050009000也可以對各行中的某一元素賦初值,如inta[3][4]={{1},{0,6},{0,0,11}};100006000
0011
100056000000也可以只對某幾行元素賦初值。如:inta[3][4]={{1},{5,6}};
(4)如果對全部元素都賦初值,則定義數(shù)組時對第一維的長度可以不指定,但第二維的長度不能省。如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等價于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};在定義時也可以只對部分元素賦初值而省略第一維的長度,但應(yīng)分行賦初值。如:inta[][4]={{0,0,3},{},{0,10}};0030000001000字符數(shù)組的定義例如:charc[10];c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;
字符數(shù)組對字符數(shù)組初始化,最容易理解的方式是逐個字符賦給數(shù)組中各元素。如:charc[10]={’I′,’′,’a′,’m′,’’,′h′,′a′,′p′,′p′,′y′};
如果在定義字符數(shù)組時不進(jìn)行初始化,則數(shù)組中各元素的值是不可預(yù)料的。如果花括弧中提供的初值個數(shù)(即字符個數(shù))大于數(shù)組長度,則按語法錯誤處理。
字符數(shù)組如果初值個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動定為空字符(即′\0′)。例如:
charc[10]={′c′,′′,′p′,′r′,′o′,′g′,′r′,′a′,′m′};
字符數(shù)組如果提供的初值個數(shù)與預(yù)定的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。例如:charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′};數(shù)組c的長度自動定為10。
例:輸出一個字符串。
程序如下:#include<stdio.h>voidmain(){charc[10]={’I’,’
’,’a’,’m’,’
’,’a’,’
’,
’b’,’o’,′y′};inti;for(i=0;i<10;i++)printf(″%c″,c[i]);printf(″\n″);}運行結(jié)果:Iamaboy字符串和字符串結(jié)束標(biāo)志為了測定字符串的實際長度,C語言規(guī)定了一個“字符串結(jié)束標(biāo)志”,以字符′\0′作為標(biāo)志。如果有一個字符串,前面9個字符都不是空字符(即′\0′),而第10個字符是′\0′,則此字符串的有效字符為9個。系統(tǒng)對字符串常量也自動加一個′\0′作為結(jié)束符。
字符數(shù)組可以用字符串常量來使字符數(shù)組初始化。例如charc[]={″Iamhappy″};也可以省略花括弧,直接寫成charc[]=“Iamhappy″;
它與下面的數(shù)組初始化等價charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′,′\0′}再比如charc[10]={"China″};
數(shù)組c的前5個元素為′C′,′h′,′i′,′n′,′a′,第6個元素為′\0′,后4個元素也設(shè)定為空字符。需要說明的是:字符數(shù)組并不要求它的最后一個字符為′\0′,甚至可以不包含′\0′。例如:charc[5]={′C′,′h′,′i′,′n′,′a′};這樣寫完全是合法的。但是由于系統(tǒng)對字符串常量自動加一個′\0′。因此,人們?yōu)榱耸固幚矸椒ㄒ恢拢谧址麛?shù)組中也常人為地加上一個′\0′。如:charc[6]={′C′,′h′,′i′,′n′,′a′,′\0′};這樣做,這樣做是為了便于引用字符數(shù)組中的字符串。
字符數(shù)組字符數(shù)組的輸入輸出可以有兩種方法:
逐個字符輸入輸出。用格式符“%c”輸入或輸出一個字符。將整個字符串一次輸入或輸出。用“%s”格式符,意思是對字符串的輸入輸出。
字符數(shù)組charc[]={″China″};printf(″%s″,c);
在內(nèi)存中數(shù)組c的狀態(tài)用“%s”格式符輸出字符串時,printf函數(shù)中的輸出項是字符數(shù)組名,而不是數(shù)組元素名。如:寫成下面這樣是不對的:printf(″%s″,c[0]);如果數(shù)組長度大于字符串實際長度,也只輸出到遇′\0′結(jié)束。輸出字符不包括結(jié)束符′\0′。
字符數(shù)組(4)如果一個字符數(shù)組中包含一個以上′\0′,則遇第一個′\0′時輸出就結(jié)束??梢杂胹canf函數(shù)輸入一個字符串。例如scanf(″%s″,c);scanf函數(shù)中的輸入項c是已定義的字符數(shù)組名,輸入的字符串應(yīng)短于已定義的字符數(shù)組的長度。例如,定義charc[6];
從鍵盤輸入:
China↙系統(tǒng)自動在China后面加一個′\0′結(jié)束符。
如果利用一個scanf函數(shù)輸入多個字符串,則在輸入時以空格分隔。例如:charstrl[5],str2[5],str3[5];scanf(″%s%s%s″,str1,str2,str3);輸入數(shù)據(jù):Howareyou?數(shù)組中未被賦值的元素的值自動置′\0′。若改為charstr[13];scanf(″%s″,str);如果輸入以下12個字符Howareyou?數(shù)組中存放的結(jié)果會是什么呢?由于系統(tǒng)把空格字符作為輸入的字符串之間的分隔符,因此只將空格前的字符“How”送到str中。由于把“How”作為一個字符串處理,故在其后加′\0′。
字符數(shù)組
字符串處理函數(shù)1.puts函數(shù)其一般形式為:puts(字符數(shù)組)其作用是將一個字符串(以′\0′結(jié)束的字符序列)輸出到終端。假如已定義str是一個字符數(shù)組名,且該數(shù)組已被初始化為“China”。則執(zhí)行puts(str);其結(jié)果是在終端上輸出China。
字符串處理函數(shù)2.gets函數(shù)其一般形式為:gets(字符數(shù)組)其作用是從終端輸入一個字符串到字符數(shù)組,并且得到一個函數(shù)值。該函數(shù)值是字符數(shù)組的起始地址。如執(zhí)行下面的函數(shù):gets(str)從鍵盤輸入:Computer↙
字符串處理函數(shù)3.strcat函數(shù)其一般形式為:strcat(字符數(shù)組1,字符數(shù)組2)Strcat的作用是連接兩個字符數(shù)組中的字符串,把字符串2接到字符串1的后面,結(jié)果放在字符數(shù)組1中,函數(shù)調(diào)用后得到一個函數(shù)值——字符數(shù)組1的地址。
字符串處理函數(shù)4.strcpy函數(shù)其一般形式為:strcpy(字符數(shù)組1,字符串2)
strcpy是“字符串復(fù)制函數(shù)”。作用是將字符串2復(fù)制到字符數(shù)組1中去。例如:charstr1[10],str2[]={″China″};strcpy(str1,str2);
字符串處理函數(shù)不能用賦值語句將一個字符串常量或字符數(shù)組直接給一個字符數(shù)組。如下面兩行都是不合法的:str1=″China″;str1=str2;
而只能用strcpy函數(shù)將一個字符串復(fù)制到另一個字符數(shù)組中去。用賦值語句只能將一個字符賦給一個字符型變量或字符數(shù)組元素。如下面是合法的:chara[5],c1,c2;c1=′A′;c2=′B′;a[0]=′C′;a[1]=′h′;a[2]=′i′;a[3]=′n′;a[4]=′a′;
5.strcmp函數(shù)其一般形式為:strcmp(字符串1,字符串2)
strcmp的作用是比較字符串1和字符串2。例如:strcmp(str1,str2);strcmp(″China″,″Korea″);strcmp(str1,″Beijing″);
字符串處理函數(shù)"A"<"B",
"a">"A","computer">"compare","36+54">"!$","CHINA">"CANADA","DOG"<"cat"
字符串比較的規(guī)則與其他語言中的規(guī)則相同,即對兩個字符串自左至右逐個字符相比(按ASCII碼值大小比較),直到出現(xiàn)不同的字符或遇到′\0′為止。如全部字符相同,則認(rèn)為相等;若出現(xiàn)不相同的字符,則以第一個不相同的字符的比較結(jié)果為準(zhǔn)。
例如比較的結(jié)果由函數(shù)值帶回(1)
如果字符串1=字符串2,函數(shù)值為0。(2)
如果字符串1>字符串2,函數(shù)值為一正整數(shù)。(3)
如果字符串1<字符串2,函數(shù)值為一負(fù)整數(shù)。注意:對兩個字符串比較,不能用以下形式:if(str1>str2)printf(″yes″);而只能用if(strcmp(str1,str2)>0)printf(″yes″);6.strlen函數(shù)其一般形式為:strlen(字符數(shù)組)
strlen是測試字符串長度的函數(shù)。函數(shù)的值為字符串中的實際長度(不包括′\0′在內(nèi))。如:charstr[10]={″China″};printf(″%d″,strlen(str));輸出結(jié)果不是10,也不是6,而是5。也可以直接測試字符串常量的長度,如strlen(″China″);
字符串處理函數(shù)例:輸入一行字符,統(tǒng)計其中有多少個單詞,單詞之間用空格分隔開。程序如下:
#include<stdio.h>voidmain(){charstring[81];inti,num=0,word=0;charc;gets(string);for(i=0;(c=string[i])!=′\0′;i++)
if(c==′′)word=0;elseif(word==0){word=1;num++;}printf(″Thereare%dwordsintheline.\n″,num);}運行情況如下:Iamaboy.↙Thereare4wordsintheline.地址和指針的概念內(nèi)存區(qū)的每一個字節(jié)有一個編號,這就是“地址”。如果在程序中定義了一個變量,在對程序進(jìn)行編譯時,系統(tǒng)就會給這個變量分配內(nèi)存單元。1、按變量地址存取變量值的方式稱為“直接訪問”方式printf(″%d″,i);scanf(″%d″,&i);k=i+j;例如:2指針另一種存取變量值的方式稱為“間接訪問”的方式。即,將變量i的地址存放在另一個變量中。在C語言中,指針是一種特殊的變量,它是存放地址的??梢酝ㄟ^語句:i_pointer=&i;將i的地址(2000)存放到i_pointer中。這時,
i_pointer的值就是(2000),即變量i所占用單元的起始地址。要存取變量i的值,可以采用間接方式:先找到存放“i的地址”的變量i_pointer
,從中取出i的地址(2000),然后到2000、2001字節(jié)取出i的值(3)。指針一個變量的地址稱為該變量的“指針”。如果有一個變量專門用來存放另一變量的地址(即指針),則它稱為“指針變量”。指針和指針變量的定義:指針
定義一個指針變量定義指針變量的一般形式為基類型*指針變量名;float*pointer_3;
//pointer_3是指向float型變量的指針變量char*pointer_4;
//pointer_4是指向字符型變量的指針變量指針可以用賦值語句使一個指針變量得到另一個變量的地址,從而使它指向一個該變量。如:pointer_1=&i;pointer_2=&j;指針指針變量的引用
通過指針變量訪問整型變量#include<stdio.h>void
main(){inta,b;
int*pointer_1,*pointer_2;a=100;b=10;
pointer_1=&a;
/*把變量a的地址賦給pointer_1*/
指針pointer_2=&b;/*把變量b的地址賦給pointer_2*/printf(″%d,%d\n″,a,b);printf(″%d,%d\n″,*pointer_1,*pointer_2);}運行結(jié)果為:100,10
100,10對“&”和“*”運算符說明:如果已執(zhí)行了語句pointer_1=&a;(1)&*
pointer_1的含義
“&”和“*”兩個運算符的優(yōu)先級別相同,但按自右而左方向結(jié)合,因此先進(jìn)行*
pointer_1的運算,它就是變量a,再執(zhí)行&運算。因此,&*
pointer_1與&a相同,即變量a的地址。指針
pointer_2=&*
pointer_1(2)*&a的含義
先進(jìn)行&a運算,得a的地址,再進(jìn)行*運算。即&a所指向的變量,也就是變量a。*&a和*pointer_1的作用是一樣的,它們都等價于變量a。即*&a與a等價。(3)
(*pointer_1)++相當(dāng)于a++。++和*為同一優(yōu)先級別,而結(jié)合方向為自右而左,因此它相當(dāng)于*(pointer_1++)。由于++在pointer_1的右側(cè),是“后加”,因此先對pointer_1的原值進(jìn)行*運算,得到a的值,然后使pointer_1的值改變,這樣pointer_1不再指向a了。例1:
輸入a和b兩個整數(shù),按先大后小的順序輸出a和b。#include<stdio.h>voidmain(){int*p1,*p2,*p,a,b;
scanf(″%d,%d″,&a,&b);p1=&a;p2=&b;
if(a<b){p=p1;p1=p2;p2=p;}
printf(″a=%d,b=%d\n\n″,a,b);
printf(″max=%d,min=%d\n″,*p1,*p2);}運行情況如下:5,9↙a=5,b=9max=9,min=5當(dāng)輸入a=5,b=9時,由于a<b,將p1和p2交換。交換前的情況見圖(a),交換后見圖(b)。
指針變量作為函數(shù)參數(shù)例2:
對輸入的兩個整數(shù)按大小順序輸出
#include<stdio.h>voidmain(){voidswap(int*p1,int*p2);
inta,b;
int*pointer_1,*pointer_2;
scanf(″%d,%d″,&a,&b);
pointer_1=&a;pointer_2=&b;
if(a<b=swap(pointer_1,pointer_2);
printf(″\n%d,%d\n″,a,b);
}
voidswap(int*p1,int*p2){
inttemp;
temp=*p1;*p1=*p2;*p2=temp;
}
數(shù)組指針
指針變量既然可以指向變量,當(dāng)然也可以指向數(shù)組元素(把某一元素的地址放到一個指針變量中)。所謂數(shù)組元素的指針就是數(shù)組元素的地址。inta[10];
(定義a為包含10個整型數(shù)據(jù)的數(shù)組)int*p;
(定義p為指向整型變量的指針變量)對該指針變量賦值:p=&a[0];把a[0]元素的地址賦給指針變量p。也就是使p指向a數(shù)組的第0號元素,如圖:通過指針引用數(shù)組元素引用一個數(shù)組元素,可以用:
(1)下標(biāo)法,如a[i]形式;(2)指針法,如*(a+i)或*(p+i)。其中a是數(shù)組名,p是指向數(shù)組元素的指針變量,其初值p=a。例1:輸出數(shù)組中的全部元素
假設(shè)有一個a數(shù)組,整型,有10個元素。要輸出各元素的值有三種方法:(1)下標(biāo)法#include<stdio.h>voidmain(){
inta[10];
inti;
for(i=0;i<10;i++)
scanf(″%d″,&a[i]);
printf(″\n″);
for(i=0;i<10;i++)
printf(″%d″,a[i]);
}(2)通過數(shù)組名計算數(shù)組元素地址,找出元素的值。#include<stdio.h>void
main(){
inta[10];
inti;
for(i=0;i<10;i++)
scanf(″%d″,&a[i]);
printf(″\n″);
for(i=0;i<10;i++)
printf(″%d″,*(a+i));
}(3)
用指針變量指向數(shù)組元素。#include<stdio.h>voidmain(){
inta[10];
int*p,i;
for(i=0;i<10;i++)
scanf(″%d″,&a[i]);
printf(″\n″);
for(p=a;p<(a+10);p++)
printf(″%d″,*p);
}討論下面程序:通過指針變量輸出a數(shù)組的10個元素。
#include<stdio.h>voidmain(){
int*p,i,a[10];p=a;
for(i=0;i<10;i++)
scanf(″%d″,p++);
printf(″\n″);
for(i=0;i<10;i++,p++)
printf(″%d″,*p);}解決這個問題的辦法,只要在第二個for循環(huán)之前加一個賦值語句:p=a;#include<stdio.h>void
main(){
int*p,i,a[10];p=a;
for(i=0;i<10;i++)
scanf(″%d″,p++);
printg(″\n″);
p=a;
for(i=0;i<10;i++,p++)
printf(″%d″,*p);}例3:用選擇法對10個整數(shù)按由大到小順序排序
#include<stdio.h>voidmain(){voidsort(intx[],intn);int*p,i,a[10];p=a;
for(i=0;i<10;i++)
scanf(″%d″,p++);p=a;
sort(p,10);
for(p=a,i=0;i<10;i++){printf(″%d″,*p);p++;}}voidsort(intx[],intn){inti,j,k,t;
for(i=0;i<n-1;i++){k=i;
for(j=i+1;j<n;j++)if(x[j]>x[k])k=j;if(k!=i){t=x[i];x[i]=x[k];x[k]=t;}}}二維數(shù)組與指針
用指針變量可以指向一維數(shù)組中的元素,也可以指向多維數(shù)組中的元素。1.多維數(shù)組元素的地址定義inta[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};則二維數(shù)組a是由3個一維數(shù)組所組成的。設(shè)二維數(shù)組的首行的首地址為2000,則
數(shù)組指針
表示形式含義地址a
二維數(shù)組名,指向一維數(shù)組a[0],即0行首地址2000a[0],*(a+0),*a0行0列元素地址2000a+1,&a[1]1行首地址2008a[1],*(a+1)1行0列元素a[1][0]的地址2008a[1]+2,*(a+1)+2,&a[1][2]1行2列元素a[1][2]的地址2012*(a[1]+2),*(*(a+1)+2),a[1][2]1行2列元素a[1][2]的值元素值為132.指向多維數(shù)組元素的指針變量在了解上面的概念后,可以用指針變量指向多維數(shù)組的元素。(1)指向數(shù)組元素的指針變量例如:用指針變量輸出二維數(shù)組元素的值
#include<stdio.h>voidmain(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int*p;
for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)
printf(″\n″);
printf(″%4d″,*p);}}運行結(jié)果如下:135791113151921233.用指向數(shù)組的指針作函數(shù)參數(shù)例4:
有一個班,3個學(xué)生,各學(xué)4門課,計算總平均分?jǐn)?shù)以及第n個學(xué)生的成績。這個題目是很簡單的。只是為了說明用指向數(shù)組的指針作函數(shù)參數(shù)而舉的例子。用函數(shù)average求總平均成績,用函數(shù)search找出并輸出第i個學(xué)生的成績。
數(shù)組指針
#include<sydio.h>voidmain(){voidaverage(float*p,intn);
voidsearch(float(*p)[4],intn);
floatscore[3][4]={{65,67,70,60},{80,
87,90,81},{90,99,100,98}};
average(*score,12);/*求12個分?jǐn)?shù)的平均分*/search(score,2);/*求序號為2的學(xué)生的成績*/}voidaverage(float*p,intn){float*p_end;
floatsum=0,aver;p_end=p+n-1;for(;p<=p_end;p++)sum=sum+(*p);aver=sum/n;
printf(″average=%5.2f\n″,aver);}voidsearch(float(*p)[4],intn)
/*p是指向具有4個元素的一維數(shù)組的指針*/{inti;
printf(″thescoreofNo.%dare:\n″,n);
for(i=0;i<4;i++)printf(″%5.2f″,*(*(p+n)+i));}程序運行結(jié)果如下:average=82.25thescoreofNo.2are:90.0099.00100.0098.00
字符串指針字符串的表示形式
例如:
定義一個字符數(shù)組,對它初始化,然后輸出該字符串
#include<stdio.h>voidmain(){charstring[]=″IloveChina!″;
printf(″%s\n″,string);}(1)用字符數(shù)組存放一個字符串,然后輸出該字符串。(2)用字符指針指向一個字符串
可以不定義字符數(shù)組,而定義一個字符指針。用字符指針指向字符串中的字符。例10.16定義字符指針#include<stdio.h>voidmain(){charstring=″IloveChina!″;
printf(″%s\n″,string);}例如:將字符串a復(fù)制為字符串b
對字符串中字符的存取,可以用下標(biāo)方法,也可以用指針方法#include<stdio.h>voidmain(){chara[]=″Iamaboy.″,b[20];
inti;
for(i=0;*(a+i)!=′\0′;i++)*(b+i)=*(a+i);*(b+i)=′\0′;
printf(″stringais:%s\n″,a);
printf(″stringbis:″);
for(i=0;b[i]?。健洌埽啊洌唬椋?/p>
printf(″%c″,b[i]);
printf(″\n″);}也可以設(shè)指針變量,用它的值的改變來指向字符串中的不同的字符。例如:
用指針變量來處理字符串復(fù)制#include<stdio.h>voidmain(){chara[]=″Iamaboy.″,b[20],*p1,*p2;
inti;p1=a;p2=b;
for(;*p1?。健洌埽啊?;p1++,p2++)*p2=*p1;*p2=′\0′;printf(″stringais:%s\n″,a);
printf(″stringbis:″);for(i=0;b[i]?。健洌埽啊?;i++)
printf(″%c″,b[i]);
printf(″\n″);}程序必須保證使p1和p2同步移動。
字符串指針(3)形參用字符指針變量
#include<stdio.h>voidmain(){voidcopy_string(char*from,char*to);char*a=″Iamateacher.″;
char*b=″youareastudent.″;
printf("stringa=%s\nstringb=%s\n″,a,b);
printf("copystringatostringb:\n");
copy_string(a,b);
printf("\nstringa=%s\nstringb=%s\n",a,b);
}voidcopy_string(char*from,char*to){for(;*from?。健洌埽啊?;from++,to++)*to=from;*to=′\0′;}對使用字符指針變量和字符數(shù)組的討論雖然用字符數(shù)組和字符指針變量都能實現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)合集人事管理篇十篇
- 《證券交易流程》課件
- 《企業(yè)戰(zhàn)略管理》課件
- 新生引航共筑未來
- 學(xué)校三年級班主任工作總結(jié)5篇
- 2023年-2024年新員工入職安全教育培訓(xùn)試題附答案(突破訓(xùn)練)
- 大學(xué)畢業(yè)晚會策劃書合集15篇
- 2023年-2024年新入職員工安全教育培訓(xùn)試題附下載答案可打印
- 2024員工三級安全培訓(xùn)考試題(原創(chuàng)題)
- 保護(hù)環(huán)境的建議書(合集15篇)
- DS12C887電子時鐘(附程序)
- 新產(chǎn)品試制流程管理辦法
- 王牌電話交換機說明書
- 列管式換熱器-換熱面積計算
- 10個地基基礎(chǔ)工程質(zhì)量通病及防治措施
- 25m預(yù)應(yīng)力混凝土簡支T梁橋設(shè)計(共30頁)
- 籃球校本課程教案
- 高一學(xué)生文理分班意向表
- 高等傳熱學(xué)部分答案
- 地球物理學(xué)進(jìn)展投稿須知
- 機床精度檢驗標(biāo)準(zhǔn) VDI3441 a ISO230-2
評論
0/150
提交評論