C語(yǔ)言編程基礎(chǔ)入門(mén)學(xué)習(xí)筆記

C語(yǔ)言是面向過(guò)程的叼风,而C++是面向?qū)ο蟮?/p>

第一章 概述

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ì)自由度大。

允許直接訪問(wèn)物理地址沙咏,能進(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ì)。現(xiàn)在很多大型應(yīng)用軟件也用C編寫(xiě)痘煤。

第二章 數(shù)據(jù)類型凑阶、運(yùn)算符與表達(dá)式

1. C的數(shù)據(jù)類型

C的數(shù)據(jù)類型包括:整型、字符型衷快、實(shí)型或浮點(diǎn)型(單精度和雙精度)宙橱、枚舉類型、數(shù)組類型蘸拔、結(jié)構(gòu)體類型师郑、共用體類型、指針類型和空類型调窍。

2. 常量與變量

常量其值不可改變宝冕,符號(hào)常量名通常用大寫(xiě)。變量其值可以改變邓萨,變量名只能由字母地梨、數(shù)字和下劃線組成,且第一個(gè)字符必須為字母或下劃線缔恳。否則為不合法的變量名宝剖。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。

3. 整型數(shù)據(jù)

整型常量的表示方法:十進(jìn)制不用說(shuō)了褐耳,八進(jìn)制以0開(kāi)頭诈闺,如0123,十六進(jìn)制以0x開(kāi)頭铃芦,如0x1e雅镊。

整型變量分為:基本型(int)、短整型(short int)刃滓、長(zhǎng)整型(long int)和無(wú)符號(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)括起來(lái),如'a','b'等年枕。還有一些是特殊的字符常量炫欺,如' ',''等。分別代表?yè)Q行和橫向跳格熏兄。

字符變量以char 來(lái)定義品洛,一個(gè)變量只能存放一個(gè)字符常量。

字符串常量是由雙引號(hào)括起來(lái)的字符序列霍弹。這里一定要注意'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

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á)式的求解過(guò)程:先求解表達(dá)式1他嫡,再求解表達(dá)式2番官,整個(gè)表達(dá)式的值是表達(dá)式2的值。

第三章 最簡(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格式符 用來(lái)輸出十進(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格式符 用來(lái)輸出unsigned型數(shù)據(jù)荷憋,以十進(jìn)制形式輸出

c格式符 用來(lái)輸出一個(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輸入。%后的*闷串,用來(lái)跳過(guò)它相應(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)算符

(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;

}

第五章 循環(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)具被。

中場(chǎng)休息時(shí)間!

小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 ?二六三只损,六八八一姿,二七六 ?】,無(wú)論你是大牛還是小白跃惫,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)叮叹!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享爆存! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

第六章 數(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( 字符串) 將字符串中的大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)

Strupr( 字符串)  將字符串中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)

以上是一些比較常用的字符串處理函數(shù)。

第七章 函數(shù)

1. 關(guān)于形參和實(shí)參的說(shuō)明

在函數(shù)被調(diào)用之前橙喘,形參不占內(nèi)存

實(shí)參可以是常量时鸵、變量或表達(dá)式

必須指定形參的類型

實(shí)參與形參類型應(yīng)一致

實(shí)參對(duì)形參的數(shù)據(jù)傳遞是"值傳遞",即單向傳遞

2. 函數(shù)返回值

如果想讓函數(shù)返回一個(gè)值渴杆,在函數(shù)中就要用return語(yǔ)句來(lái)獲得寥枝,在定義函數(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)行說(shuō)明穴亏。除非:(1)被調(diào)函數(shù)的返回值類型為整型或字符型(2)被調(diào)函數(shù)出現(xiàn)在主調(diào)函數(shù)之前蜂挪。

4)對(duì)函數(shù)的說(shuō)明和定義是不同的,定義是指對(duì)函數(shù)功能的確立嗓化,包括指定函數(shù)名棠涮,函數(shù)值類型,形參及其類型刺覆、函數(shù)體等严肪。說(shuō)明則只是對(duì)已定義的函數(shù)返回值類型進(jìn)行說(shuō)明,只包括函數(shù)名、函數(shù)類型以及一個(gè)空的括弧驳糯,不包括形參和函數(shù)體篇梭。

5)c語(yǔ)言允許函數(shù)的遞歸調(diào)用(在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接的調(diào)用該函數(shù)本身)。

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í)可以省略第一維的大小說(shuō)明谓苟,但不能省略第二維或更高維的說(shuō)明官脓。

5. 局部變量和全局變量

從變量作用域角度分,變量可分為局部變量和全局變量涝焙。

1)內(nèi)部變量(局部變量)

在一個(gè)函數(shù)內(nèi)定義卑笨,只在函數(shù)范圍內(nèi)有效的變量。

2)外部變量(全局變量)

在函數(shù)外定義仑撞,可以為本文件其它函數(shù)所共用赤兴,有效范圍從定義變量的位置開(kāi)始到本文件結(jié)束。建議盡量少使用全局變量隧哮,因?yàn)樗诔绦蛉繄?zhí)行過(guò)程中都占用資源桶良,而且使函數(shù)的通用性降低了。如果在定義外部變量之前的函數(shù)要想使用該外部變量沮翔,則應(yīng)在該函數(shù)中用extern作外部變量說(shuō)明陨帆。

6. 動(dòng)態(tài)存儲(chǔ)變量與靜態(tài)存儲(chǔ)變量

從變量值存在的時(shí)間(生存期)角度來(lái)分,可分為靜態(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ù)中的局部變量如不作專門(mén)說(shuō)明责静,都之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說(shuō)明。但只有局部動(dòng)態(tài)變量和形式參數(shù)可以作為register變量词渤,其它不行牵舱。

2) 全局變量的存儲(chǔ)方式

全局變量在函數(shù)外部定義,編譯時(shí)分配在靜態(tài)存儲(chǔ)區(qū)缺虐,可以在程序中各個(gè)函數(shù)所引用芜壁。多個(gè)文件的情況如何引用全局變量呢?假如在一個(gè)文件定義全局變量高氮,在別的文件引用慧妄,就要在此文件中用extern對(duì)全局變量說(shuō)明,但如果全局變量定義時(shí)用static的話剪芍,此全局變量就只能在本文件中引用了塞淹,而不能被其它文件引用。

3) 存儲(chǔ)類別小結(jié)

從作用域角度分紊浩,有局部變量和全局變量

局部變量:自動(dòng)變量窖铡,即動(dòng)態(tài)局部變量(離開(kāi)函數(shù),值就消失)

靜態(tài)局部變量(離開(kāi)函數(shù)坊谁,值仍保留)

寄存器變量(離開(kāi)函數(shù)费彼,值就消失)

(形參可定義為自動(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說(shuō)明。

第八章 預(yù)編譯處理

c編譯系統(tǒng)在對(duì)程序進(jìn)行通常的編譯之前裤翩,先進(jìn)行預(yù)處理资盅。c提供的預(yù)處理功能主要有以下三種:1)宏定義 2)文件包含 3)條件編譯

1. 宏定義

不帶參數(shù)的宏定義

用一個(gè)指定的標(biāo)識(shí)符來(lái)代表一個(gè)字符串,形式:#define 標(biāo)識(shí)符 字符串

幾點(diǎn)說(shuō)明:

1) 宏名一般用大寫(xiě)

2) 宏定義不作語(yǔ)法檢查,只有在編譯被宏展開(kāi)后的源程序時(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)存的腮出,而宏展開(kāi)時(shí)并不分配內(nèi)存,也沒(méi)有返回值的概念

3) 對(duì)函數(shù)中的實(shí)參和形參都要定義類型芝薇,而且要求一致利诺,宏名無(wú)類型,其參數(shù)也沒(méi)有類型剩燥。

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)被定義過(guò)(一般用#define),則對(duì)程序段1編譯物臂,否則對(duì)程序段2編譯旺拉。

2)#ifndef 標(biāo)識(shí)符

程序段1

#else

程序段2

#endif

它的作用和#ifdef相反,當(dāng)標(biāo)識(shí)符沒(méi)被定義過(guò)棵磷,對(duì)程序段1編譯蛾狗,否則對(duì)程序段2編譯。

3)#if 表達(dá)式

程序段1

#else

程序段2

#endif

它的作用:當(dāng)表達(dá)式值為真(非0)時(shí)仪媒,對(duì)程序段1編譯沉桌,否則對(duì)程序段2編譯。

第九章 指針

指針說(shuō)白了就是地址。指針變量就是用來(lái)存放指針(地址)的變量蒲牧。

1. 變量的指針和指向變量的指針變量

讀起來(lái)很拗口撇贺,說(shuō)白了就是變量的地址和用來(lái)存放變量地址的地址變量。因?yàn)橐粋€(gè)變量在編譯的時(shí)候系統(tǒng)要為它分配一個(gè)地址冰抢,假如再用一個(gè)變量來(lái)存放這個(gè)地址松嘶,那么這個(gè)變量就叫做指向變量的指針變量,也就是用來(lái)存放變量地址的這么一個(gè)變量挎扰。所謂"指向"就是指存放××的地址翠订,如指向變量的指針變量,"指向"就是指用來(lái)存放變量的地址遵倦,再如指向數(shù)組的指針變量尽超,"指向"就是指存放數(shù)組的地址。只要理解了這個(gè)梧躺,指針也就不難了似谁。另外,還有指向字符串的指針變量掠哥,指向函數(shù)的指針變量巩踏,指向指針的指針變量等。

1) 指針變量的定義

形式:類型標(biāo)識(shí)符 *標(biāo)識(shí)符 如:int *pointer;

要注意兩點(diǎn):*表示pointer是個(gè)指針變量续搀,在用這個(gè)變量的時(shí)候不能寫(xiě)成*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)通過(guò)指針引用數(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)用過(guò)程中如果形參的值發(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)用熟練了就沒(méi)什么復(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)存中開(kāi)辟了一個(gè)數(shù)組夸研,只不過(guò)數(shù)組的首地址存放在字符指針變量str中邦蜜,千萬(wàn)不要認(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è)不確定

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末塘揣,一起剝皮案震驚了整個(gè)濱河市包雀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亲铡,老刑警劉巖才写,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奖蔓,居然都是意外死亡赞草,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)吆鹤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)厨疙,“玉大人,你說(shuō)我怎么就攤上這事疑务≌雌啵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵知允,是天一觀的道長(zhǎng)撒蟀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)温鸽,這世上最難降的妖魔是什么保屯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮涤垫,結(jié)果婚禮上姑尺,老公的妹妹穿的比我還像新娘。我一直安慰自己蝠猬,他們只是感情好股缸,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吱雏,像睡著了一般敦姻。 火紅的嫁衣襯著肌膚如雪瘾境。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天镰惦,我揣著相機(jī)與錄音迷守,去河邊找鬼。 笑死旺入,一個(gè)胖子當(dāng)著我的面吹牛兑凿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茵瘾,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼礼华,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拗秘?” 一聲冷哼從身側(cè)響起圣絮,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雕旨,沒(méi)想到半個(gè)月后扮匠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凡涩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年棒搜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片活箕。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡力麸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出育韩,到底是詐尸還是另有隱情克蚂,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布座慰,位于F島的核電站,受9級(jí)特大地震影響翠拣,放射性物質(zhì)發(fā)生泄漏版仔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一误墓、第九天 我趴在偏房一處隱蔽的房頂上張望蛮粮。 院中可真熱鬧,春花似錦谜慌、人聲如沸然想。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)变泄。三九已至令哟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妨蛹,已是汗流浹背屏富。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛙卤,地道東北人狠半。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像颤难,于是被迫代替她去往敵國(guó)和親神年。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型行嗤。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一已日。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,449評(píng)論 3 44
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)昂验,也就是一...
    悟名先生閱讀 4,151評(píng)論 0 13
  • 櫻雨落入懷 透徹捂敌,清爽,絲絲入肺 活躍的思想都含苞待放 綿綿一朵云既琴,一束雨占婉,一抹涼 杳杳一輪月,一把光甫恩,一情系 行...
    拒絕像個(gè)蘑菇閱讀 297評(píng)論 0 2
  • CAD 123D Make 一類的工具都可以把 3D 物體分解成 2D 部件逆济。之前介紹過(guò)的 Antimony 很適...
    Kidult閱讀 714評(píng)論 0 0
  • Activity設(shè)置轉(zhuǎn)場(chǎng)動(dòng)畫(huà)需要在startActivity和finish之后,意為給開(kāi)啟新視圖或關(guān)閉舊視圖添加轉(zhuǎn)...
    陳利健閱讀 6,441評(píng)論 1 12