標(biāo)題:
C語(yǔ)言知識(shí)點(diǎn)總結(jié)
[打印本頁(yè)]
作者:
51黑tt
時(shí)間:
2016-3-6 02:59
標(biāo)題:
C語(yǔ)言知識(shí)點(diǎn)總結(jié)
第一章 概述
1. C語(yǔ)言的特點(diǎn)
①語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。共有32個(gè)關(guān)鍵字,9種控制語(yǔ)句。
②運(yùn)算符豐富,公有34種運(yùn)算符。
③數(shù)據(jù)結(jié)構(gòu)豐富,數(shù)據(jù)類型有:整型、實(shí)型、字符型、數(shù)組、指針、結(jié)構(gòu)體、共用體等。
④具有結(jié)構(gòu)化的控制語(yǔ)句(如if…else、while、do…while、switch、for)
⑤語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。
⑥允許直接訪問物理地址,能進(jìn)行位(bit)操作,可以直接對(duì)硬件操作。
⑦生成目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高。
⑧可移植性好。
2. C語(yǔ)言的用途
C雖不擅長(zhǎng)科學(xué)計(jì)算和管理領(lǐng)域,但對(duì)操作系統(tǒng)和系統(tǒng)實(shí)用程序以及對(duì)硬件進(jìn)行操作方面,C有明顯的優(yōu)勢(shì),F(xiàn)在很多大型應(yīng)用軟件也用C編寫。
Top of Page
第二章 數(shù)據(jù)類型、運(yùn)算符與表達(dá)式
1. C的數(shù)據(jù)類型
C的數(shù)據(jù)類型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類型、數(shù)組類型、結(jié)構(gòu)體類型、共用體類型、指針類型和空類型。
2. 常量與變量
常量其值不可改變,符號(hào)常量名通常用大寫。變量其值可以改變,變量名只能由字母、數(shù)字和下劃線組成,且第一個(gè)字符必須為字母或下劃線。否則為不合法的變量名。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。
3. 整型數(shù)據(jù)
整型常量的表示方法:十進(jìn)制不用說了,八進(jìn)制以0開頭,如0123,十六進(jìn)制以0x開頭,如0x1e。
整型變量分為:基本型(int)、短整型(short int)、長(zhǎng)整型(long int)和無符號(hào)型。不同機(jī)器上各類數(shù)據(jù)所占內(nèi)存字節(jié)數(shù)不同,一般int型為2個(gè)字節(jié),long型為4個(gè)字節(jié)。
4. 實(shí)型數(shù)據(jù)
實(shí)型常量表示形式:十進(jìn)制形式由數(shù)字和小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn)),如:0.12、.123、123
0.0等。指數(shù)形式如123e3代表123×10的三次方。
實(shí)型變量分為單精度(float)和雙精度(double)兩類。在一般系統(tǒng)中float型占4字節(jié),7位有效數(shù)字,double型占8字節(jié),15~16位有效數(shù)字。
5. 字符型數(shù)據(jù)
字符變量用單引號(hào)括起來,如'a','b'等。還有一些是特殊的字符常量,如'\n','\t'等。分別代表?yè)Q行和橫向跳格。
字符變量以char 來定義,一個(gè)變量只能存放一個(gè)字符常量。
字符串常量是由雙引號(hào)括起來的字符序列。這里一定要注意'a'和"a"的不同,前者為字符常量,后者為字符串常量,c規(guī)定:每個(gè)字符串的結(jié)尾加一個(gè)結(jié)束標(biāo)志'',實(shí)際上"a"包含兩個(gè)字符:'a'和''。
6. 數(shù)值型數(shù)據(jù)間的混合運(yùn)算
整型、字符型、實(shí)型數(shù)據(jù)間可以混合運(yùn)算,運(yùn)算時(shí)不同類型數(shù)據(jù)要轉(zhuǎn)換成同一類型再運(yùn)算,轉(zhuǎn)換規(guī)則:
char,short -> int -> unsigned -> long -> double <- float
7. 運(yùn)算符和表達(dá)式
c運(yùn)算符包括:
算數(shù)運(yùn)算符( + - * / %。
關(guān)系運(yùn)算符( > < == >= <= != )
邏輯運(yùn)算符( ! && || )
位運(yùn)算符( << >> ~ | ^ & )
賦值運(yùn)算符( = )
條件運(yùn)算符( ? : )
逗號(hào)運(yùn)算符( , )
指針運(yùn)算符( * & )
求字節(jié)數(shù)( sizeof )
強(qiáng)制類型轉(zhuǎn)換(類型)
分量運(yùn)算符( . -> )
下標(biāo)運(yùn)算符( [ ] )
其它運(yùn)算符( 如函數(shù)調(diào)用運(yùn)算符( ) )
自增自減運(yùn)算符( ++ -- )注意:++i和i++的不同之處,++i使用i之前先使i加1,i++使用i之后,使i加1。
逗號(hào)表達(dá)式的求解過程:先求解表達(dá)式1,再求解表達(dá)式2,整個(gè)表達(dá)式的值是表達(dá)式2的值。
Top of Page
第三章 最簡(jiǎn)單的c程序設(shè)計(jì)
1.c的9種控制語(yǔ)句:
if() ~ else~
for()~
while()~
do~while()
continue
break
switch
goto
return
程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu),選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)
2.?dāng)?shù)據(jù)輸出
c語(yǔ)言不提供輸入輸出語(yǔ)句,輸入輸出操作是由c的庫(kù)函數(shù)完成。但要包含頭文件stdio.h。
putchar( ) 向終端輸出一個(gè)字符
printf( )的格式字符:
① d格式符 用來輸出十進(jìn)制整數(shù)
%d 按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出
%md 使輸出長(zhǎng)度為m,如果數(shù)據(jù)長(zhǎng)度小于m,則左補(bǔ)空格,如果大于m,則輸出實(shí)際長(zhǎng)度
%ld 輸出長(zhǎng)整型數(shù)據(jù)
② o格式符 以八進(jìn)制形式輸出整數(shù)
③ x格式符 以十六進(jìn)制形式輸出整數(shù)
④ u格式符 用來輸出unsigned型數(shù)據(jù),以十進(jìn)制形式輸出
⑤ c格式符 用來輸出一個(gè)字符
⑥ s格式符 輸出一個(gè)字符串
%s 輸出實(shí)際長(zhǎng)度字符串
%ms 輸出的串占m列,如果串長(zhǎng)度小于m,左補(bǔ)空格,如果大于m,實(shí)際輸出
%-ms輸出的串占m列,如果串長(zhǎng)度小于m,右補(bǔ)空格,
%m.ns 輸出占m列,但只取字符串中左端n個(gè)字符并靠右對(duì)齊
%-m.ns m、n含義同上,靠左對(duì)齊,如果n>m,則m自動(dòng)取n值
⑦ f格式符 以小數(shù)形式輸出實(shí)數(shù)
%f 整數(shù)部分全部輸出,小數(shù)部分輸出6位
%m.nf 輸出數(shù)據(jù)共占m列,其中有n位小數(shù)。如果數(shù)值長(zhǎng)度小于m,左補(bǔ)空格
%-m.nf 同上,右補(bǔ)空格
⑧ e格式符 以指數(shù)形式輸出實(shí)數(shù)
%e 系統(tǒng)指定6位小數(shù),5位指數(shù)(e+002 )
⑨ g格式符 輸出實(shí)數(shù),根據(jù)數(shù)值大小,自動(dòng)選f格式或e格式
3.?dāng)?shù)據(jù)輸入
getchar( ) 從終端輸入一個(gè)字符
scanf( 格式控制,地址列表) 標(biāo)準(zhǔn)C scanf中不使用%u,對(duì)于unsigned型數(shù)據(jù),以%d或%o或%x輸入。%后的*,用來跳過它相應(yīng)的數(shù)據(jù)。輸入數(shù)據(jù)時(shí)不能規(guī)定精度如scanf( "%7.2f", &a );是不合法的。
第四章 邏輯運(yùn)算和判斷選取控制
1. 關(guān)系運(yùn)算符:
c提供6種關(guān)系運(yùn)算符(> < <= >= == != )前四種優(yōu)先級(jí)高于后兩種。
2. If語(yǔ)句
C提供了三種形式的if語(yǔ)句
If(表達(dá)式) 語(yǔ)句
If(表達(dá)式) 語(yǔ)句1 else 語(yǔ)句2
If(表達(dá)式1) 語(yǔ)句1
Else if(表達(dá)式2) 語(yǔ)句2
…
else 語(yǔ)句n
3. 條件運(yùn)算符
3樓 (a>b)?a:b 條件為真,表達(dá)式取值a,否則取值b
4. Switch語(yǔ)句
Switch(表達(dá)式)
{
case 常量表達(dá)式1:語(yǔ)句1; break;
case 常量表達(dá)式2:語(yǔ)句2; break;
…
case 常量表達(dá)式n:語(yǔ)句n; break;
default :語(yǔ)句n+1;
}
Top of Page
第五章 循環(huán)控制
1. 幾種循環(huán)語(yǔ)句
goto語(yǔ)句(現(xiàn)已很少使用)
while語(yǔ)句 先判斷表達(dá)式后執(zhí)行語(yǔ)句
do-while語(yǔ)句 先執(zhí)行語(yǔ)句后判斷表達(dá)式
for語(yǔ)句
2. Break語(yǔ)句和continue語(yǔ)句
Break語(yǔ)句用于跳出循環(huán),continue用于結(jié)束本次循環(huán)。
Top of Page
第六章 數(shù)組
1. 一維數(shù)組
c規(guī)定只有靜態(tài)存儲(chǔ)(static)和外部存儲(chǔ)(extern)數(shù)組才能初始化。給數(shù)組初始化時(shí)可以不指定數(shù)組長(zhǎng)度。
2. 二維數(shù)組
3. 字符數(shù)組
部分字符串處理函數(shù)
puts(字符數(shù)組) 將一個(gè)字符串輸出到終端。
gets(字符數(shù)組) 從終端輸入一個(gè)字符串到字符數(shù)組,并且得到一個(gè)函數(shù)值,為該字符數(shù)組的首地址
strcat(字符數(shù)組1,字符數(shù)組2) 連接兩個(gè)字符數(shù)組中的字符串,數(shù)組1必須足夠大。
Strcpy(字符數(shù)組1,字符串2) 將字符串2拷貝到字符數(shù)組1中。
Strcmp(字符串1,字符串2) 比較字符串,相等返回0,字符串1>字符串2,返回正數(shù),小于返回負(fù)數(shù)。
Strlen(字符數(shù)組) 求字符串長(zhǎng)度。
Strlwr( 字符串) 將字符串中的大寫字母轉(zhuǎn)換成小寫
Strupr( 字符串) 將字符串中的小寫字母轉(zhuǎn)換成大寫
以上是一些比較常用的字符串處理函數(shù)。
Top of Page
第七章 函數(shù)
1. 關(guān)于形參和實(shí)參的說明
① 在函數(shù)被調(diào)用之前,形參不占內(nèi)存
② 實(shí)參可以是常量、變量或表達(dá)式
③ 必須指定形參的類型
④ 實(shí)參與形參類型應(yīng)一致
⑤ 實(shí)參對(duì)形參的數(shù)據(jù)傳遞是"值傳遞",即單向傳遞
2. 函數(shù)返回值
如果想讓函數(shù)返回一個(gè)值,在函數(shù)中就要用return語(yǔ)句來獲得,在定義函數(shù)時(shí)也要對(duì)函數(shù)值指定類型,如果不指定,默認(rèn)返回整型。
3. 函數(shù)調(diào)用
1)注意在函數(shù)調(diào)用時(shí)實(shí)參和形參的個(gè)數(shù)、類型應(yīng)一一對(duì)應(yīng)。對(duì)實(shí)參表求值的順序是不確定的,有的系統(tǒng)按自左至右,有的系統(tǒng)則按自右至左的順序。這一點(diǎn)要注意。
2)函數(shù)調(diào)用的方式:函數(shù)語(yǔ)句,函數(shù)表達(dá)式,函數(shù)參數(shù)
3)如果主調(diào)函數(shù)和被調(diào)函數(shù)在同一文件中,并且主調(diào)函數(shù)在前,那么一般要在主調(diào)函數(shù)中對(duì)被調(diào)函數(shù)進(jìn)行說明。除非:(1)被調(diào)函數(shù)的返回值類型為整型或字符型(2)被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前。
4)對(duì)函數(shù)的說明和定義是不同的,定義是指對(duì)函數(shù)功能的確立,包括指定函數(shù)名,函數(shù)值類型,形參及其類型、函數(shù)體等。說明則只是對(duì)已定義的函數(shù)返回值類型進(jìn)行說明,只包括函數(shù)名、函數(shù)類型以及一個(gè)空的括弧,不包括形參和函數(shù)體。
5)c語(yǔ)言允許函數(shù)的遞歸調(diào)用(在調(diào)用一個(gè)函數(shù)的過程中又出現(xiàn)直接或間接的調(diào)用該函數(shù)本身)。
4樓
4. 數(shù)組作為函數(shù)參數(shù)
1)數(shù)組元素作為函數(shù)參數(shù) 和一般變量相同
2)數(shù)組名作參數(shù)應(yīng)該在主調(diào)和被調(diào)函數(shù)分別定義數(shù)組,形參數(shù)組的大小可以不定義。注意:數(shù)組名作參數(shù),不是單向傳遞。3)多維數(shù)組作參數(shù),在被調(diào)函數(shù)中對(duì)形參數(shù)組定義時(shí)可以省略第一維的大小說明,但不能省略第二維或更高維的說明。
5. 局部變量和全局變量
從變量作用域角度分,變量可分為局部變量和全局變量。
1)內(nèi)部變量(局部變量)
在一個(gè)函數(shù)內(nèi)定義,只在函數(shù)范圍內(nèi)有效的變量。
2)外部變量(全局變量)
在函數(shù)外定義,可以為本文件其它函數(shù)所共用,有效范圍從定義變量的位置開始
到本文件結(jié)束。建議盡量少使用全局變量,因?yàn)樗诔绦蛉繄?zhí)行過程中都占用
資源,而且使函數(shù)的通用性降低了。如果在定義外部變量之前的函數(shù)要想使用該
外部變量,則應(yīng)在該函數(shù)中用extern作外部變量說明。
6. 動(dòng)態(tài)存儲(chǔ)變量與靜態(tài)存儲(chǔ)變量
從變量值存在的時(shí)間(生存期)角度來分,可分為靜態(tài)存儲(chǔ)變量和動(dòng)態(tài)存儲(chǔ)變量。靜態(tài)存儲(chǔ)指在程序運(yùn)行期間給變量分配固定的存儲(chǔ)空間,動(dòng)態(tài)存儲(chǔ)指程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)的給變量分配存儲(chǔ)空間。
C語(yǔ)言中,變量的存儲(chǔ)方法分為兩大類:靜態(tài)存儲(chǔ)類和動(dòng)態(tài)存儲(chǔ)類,具體包括:自動(dòng)的(auto),靜態(tài)的(static),寄存器的(register),外部的(extern)。
1) 局部變量的存儲(chǔ)方式
函數(shù)中的局部變量如不作專門說明,都之a(chǎn)uto的,即動(dòng)態(tài)存儲(chǔ)的,auto可以省略。局部變量也可以定義為static的,這時(shí)它在函數(shù)內(nèi)值是不變的。靜態(tài)局部變量如不賦初值,編譯時(shí)系統(tǒng)自動(dòng)賦值為0,動(dòng)態(tài)局部變量如不賦初值,則它的值是個(gè)不確定的值。C規(guī)定,只有在定義全局變量和局部靜態(tài)變量時(shí)才能對(duì)數(shù)組賦初值。為提高執(zhí)行效率,c允許將局部變量值放在寄存器中,這種變量叫register變量,要用register說明。但只有局部動(dòng)態(tài)變量和形式參數(shù)可以作為register變量,其它不行。
2) 全局變量的存儲(chǔ)方式
全局變量在函數(shù)外部定義,編譯時(shí)分配在靜態(tài)存儲(chǔ)區(qū),可以在程序中各個(gè)函數(shù)所引用。多個(gè)文件的情況如何引用全局變量呢?假如在一個(gè)文件定義全局變量,在別的文件引用,就要在此文件中用extern對(duì)全局變量說明,但如果全局變量定義時(shí)用static的話,此全局變量就只能在本文件中引用了,而不能被其它文件引用。
3) 存儲(chǔ)類別小結(jié)
從作用域角度分,有局部變量和全局變量
局部變量:自動(dòng)變量,即動(dòng)態(tài)局部變量(離開函數(shù),值就消失)
靜態(tài)局部變量(離開函數(shù),值仍保留)
寄存器變量(離開函數(shù),值就消失)
。ㄐ螀⒖啥x為自動(dòng)變量和寄存器變量)
全局變量:靜態(tài)全局變量(只限本文件引用)
全局變量(允許其它文件引用)
從存在的時(shí)間分,有靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)
動(dòng)態(tài)存儲(chǔ):自動(dòng)變量(本函數(shù)內(nèi)有效)
寄存器變量(本函數(shù)內(nèi)有效)
形參
靜態(tài)存儲(chǔ):靜態(tài)局部變量(函數(shù)內(nèi)有效)
靜態(tài)全局變量(本文件內(nèi)有效)
全局變量(其它文件可引用)
從變量值存放的位置分
靜態(tài)存儲(chǔ)區(qū):靜態(tài)局部變量
靜態(tài)全局變量
全局變量
動(dòng)態(tài)存儲(chǔ)區(qū):自動(dòng)變量和形參
寄存器內(nèi):寄存器變量
7. 內(nèi)部函數(shù)和外部函數(shù)
內(nèi)部函數(shù):只能被本文件中的其它函數(shù)調(diào)用,定義時(shí)前加static,內(nèi)部函數(shù)又稱靜態(tài)函數(shù)。
外部函數(shù):可以被其它文件調(diào)用,定義時(shí)前加extern,如果省略,則隱含為外部函數(shù),在需要調(diào)用此函數(shù)的文件中,一般要用extern說明。
第八章 預(yù)編譯處理
c編譯系統(tǒng)在對(duì)程序進(jìn)行通常的編譯之前,先進(jìn)行預(yù)處理。c提供的預(yù)處理功能主要有以下三種:1)宏定義 2)文件包含 3)條件編譯
1. 宏定義
不帶參數(shù)的宏定義
用一個(gè)指定的標(biāo)識(shí)符來代表一個(gè)字符串,形式:#define 標(biāo)識(shí)符 字符串
幾點(diǎn)說明:
1) 宏名一般用大寫
2) 宏定義不作語(yǔ)法檢查,只有在編譯被宏展開后的源程序時(shí)才會(huì)報(bào)錯(cuò)
3) 宏定義不是c語(yǔ)句,不在行末加分號(hào)
4) 宏名有效范圍為定義到本源文件結(jié)束
5) 可以用#undef命令終止宏定義的作用域
6) 在宏定義時(shí),可以引用已定義的宏名
帶參數(shù)的宏定義
定義形式:#define 宏名(參數(shù)表) 字符串
這和函數(shù)有些類似,但他們是不同的:
1) 函數(shù)調(diào)用時(shí),先求實(shí)參表達(dá)式值,再代入形參,而宏只是簡(jiǎn)單替換,并不求值
2) 函數(shù)調(diào)用是在程序運(yùn)行時(shí)分配內(nèi)存的,而宏展開時(shí)并不分配內(nèi)存,也沒有返回值的概念
3) 對(duì)函數(shù)中的實(shí)參和形參都要定義類型,而且要求一致,宏名無類型,其參數(shù)也沒有類型。
4) 函數(shù)只有一個(gè)返回值,而宏可以得到幾個(gè)結(jié)果
5) 宏替換不占運(yùn)行時(shí)間,只占編譯時(shí)間,而函數(shù)調(diào)用占運(yùn)行時(shí)間
2. 文件包含處理
#include "文件1" 就是將文件1的全部?jī)?nèi)容復(fù)制插入到#include位置,作為一個(gè)源文件進(jìn)行編譯。
在#include命令中,文件名可以用" "也可以用< >,假如現(xiàn)在file1.c中包含file2.h文件," "表示系統(tǒng)先在file1.c所在目錄中找file2.h,如果找不到,再按系統(tǒng)指定的標(biāo)準(zhǔn)方式檢索目錄,< >表示系統(tǒng)直接按指定的標(biāo)準(zhǔn)方式檢索目錄。所以用" "保險(xiǎn)一點(diǎn)。
3. 條件編譯
條件編譯指不對(duì)整個(gè)程序都編譯,而是編譯滿足條件的那部分。條件編譯有以下幾種形式:
1)#ifdef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
它的作用:當(dāng)標(biāo)識(shí)符在前面已經(jīng)被定義過(一般用#define),則對(duì)程序段1編譯,否則對(duì)程序段2編譯。
2)#ifndef 標(biāo)識(shí)符
程序段1
#else
程序段2
#endif
它的作用和#ifdef相反,當(dāng)標(biāo)識(shí)符沒被定義過,對(duì)程序段1編譯,否則對(duì)程序段2編譯。
3)#if 表達(dá)式
程序段1
#else
程序段2
#endif
它的作用:當(dāng)表達(dá)式值為真(非0)時(shí),對(duì)程序段1編譯,否則對(duì)程序段2編譯。
Top of Page
第九章 指針
指針說白了就是地址。指針變量就是用來存放指針(地址)的變量。
1. 變量的指針和指向變量的指針變量
讀起來很拗口,說白了就是變量的地址和用來存放變量地址的地址變量。因?yàn)橐粋(gè)變量在編譯的時(shí)候系統(tǒng)要為它分配一個(gè)地址,假如再用一個(gè)變量來存放這個(gè)地址,那么這個(gè)變量就叫做指向變量的指針變量,也就是用來存放變量地址的這么一個(gè)變量。所謂"指向"就是指存放××的地址,如指向變量的指針變量,"指向"就是指用來存放變量的地址,再如指向數(shù)組的指針變量,"指向"就是指存放數(shù)組的地址。只要理解了這個(gè),指針也就不難了。另外,還有指向字符串的指針變量,指向函數(shù)的指針變量,指向指針的指針變量等。
1) 指針變量的定義
形式:類型標(biāo)識(shí)符 *標(biāo)識(shí)符 如:int *pointer;
要注意兩點(diǎn):*表示pointer是個(gè)指針變量,在用這個(gè)變量的時(shí)候不能寫成*pointer, *pointer是pointer指向的變量。一個(gè)指針變量只能指向同一個(gè)類型的變量。如上面
pointer只能指向int型變量。
2)指針變量的引用
兩個(gè)有關(guān)的運(yùn)算符:
& 取地址運(yùn)算符 &a 就代表變量a的地址
* 指針運(yùn)算符 *a 就代表變量a的值
2. 數(shù)組的指針和指向數(shù)組的指針變量
數(shù)組的指針指數(shù)組的起始地址,數(shù)組元素的指針指數(shù)組元素的地址。
1)指向數(shù)組元素的指針變量的定義與賦值
定義和指向變量的指針變量定義相同,c規(guī)定數(shù)組名代表數(shù)組的首地址,即第一個(gè)數(shù)組元素地址。
2)通過指針引用數(shù)組元素
我們通常引用數(shù)組元素的形式是a[i],如果用指針可以這樣引用,*(a+i),或定義一個(gè)指針變量p,將數(shù)組a的首地址賦給p,p=a;然后用*(p+i)引用。
注意:指針變量p指向數(shù)組a首地址,則p++指向數(shù)組a的下一元素地址,即a[1]的地址。
3)數(shù)組名作函數(shù)參數(shù)
形參數(shù)組和實(shí)參數(shù)組之間并不是值傳遞,而是共用同一段地址,所以在函數(shù)調(diào)用過程中如果形參的值發(fā)生變化,則實(shí)參的值也跟著變化。
4)指向多維數(shù)組的指針和指針變量
以二維數(shù)組為居多。假設(shè)定義了一個(gè)二維數(shù)組a[3][4],那么
a代表整個(gè)二維數(shù)組的首地址,也代表第0行的首地址,同時(shí)也是第0行第0列的元素的首地址。a +0和a[0]代表第0行首
地址,a+1和a[1]代表第一行的首地址。
假設(shè)a是一個(gè)數(shù)組的首地址,那么如果a是一維的,a+I代表第I個(gè)元素的地址,如果a是二維的,則a+I代表第I行的首地址。
那么第一行第二列的元素地址如何表示呢?a[1]+2或&a[1][2]或*(a+1)+2。
我們只要記住:在二維數(shù)組中a代表整個(gè)數(shù)組的首地址,a[I]代表第I行的首地址,a[I]與*(a+I)等價(jià)就行了。只要運(yùn)用熟練了就沒什么復(fù)雜的了。
5)指向由m個(gè)整數(shù)組成的一維數(shù)組的指針變量
如:int (*p)[4],p是一個(gè)指向包含4個(gè)元素的一維數(shù)組,如果p先指向a[0],則p+1指向a[1],即p的增值是以一維數(shù)組的長(zhǎng)度為單位的,這里是4,舉個(gè)例子:
假設(shè)a[3][4]=,p先指向a[0]也就是數(shù)組a的首地址,那么p+1就是a[1]的首地址即元素9的地址,因?yàn)樵诙xp時(shí)int (*p)[4],定義一維數(shù)組長(zhǎng)度為4,所以p+1就等于加了一個(gè)一維數(shù)組的長(zhǎng)度4。
3. 字符串的指針和指向字符串的指針變量
1)字符串的表示形式
c中字符串有兩種表示形式:一種是數(shù)組,一種是字符指針
char string[]="I love c!";
char *str="I love c!";
其實(shí)指針形式也是在內(nèi)存中開辟了一個(gè)數(shù)組,只不過數(shù)組的首地址存放在字符指針變量str中,千萬不要認(rèn)為str是一個(gè)字符串變量。
2)字符串指針作函數(shù)參數(shù)
實(shí)際上字符串指針就是數(shù)組的首地址。
3)字符指針變量與字符數(shù)組的區(qū)別
① 字符數(shù)組由若干元素組成,每個(gè)元素存放一個(gè)字符,而字符指針變量只存放字符串的首地址,不是整個(gè)字符串
② 對(duì)數(shù)組初始化要用static,對(duì)指針變量不用。
③ 對(duì)字符數(shù)組賦值,只能對(duì)各個(gè)元素賦值,不能象下面這樣:
char str[14];
str="I love c!";
對(duì)指針變量可以,
char *str;
str="I love c!";
注意:此時(shí)賦給str的不是字符,而是字符串首地址。
④ 數(shù)組在定義和編譯時(shí)分配內(nèi)存單元,而指針變量定義后最好將其初始化,否則指針變量的值會(huì)指向一個(gè)不確定。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1