日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[C程序设计语言]第一部分

發(fā)布時(shí)間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C程序设计语言]第一部分 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?
數(shù)組... 1
extern. 3
“定義”與“聲明”... 3
變量命名規(guī)則... 3
數(shù)據(jù)類(lèi)型... 3
算術(shù)類(lèi)型提升與轉(zhuǎn)換規(guī)則... 5
void. 5
\000\xhh. 5
ANSI C中所有轉(zhuǎn)義字符... 6
\0. 6
?

數(shù)組


局部數(shù)組定義時(shí)如果未指定長(zhǎng)度,又未指定數(shù)組內(nèi)容,則編譯報(bào)錯(cuò)。但全局的好像可以在定義時(shí)不指定長(zhǎng)度的情況下也不指定數(shù)組內(nèi)容,但編譯時(shí)會(huì)有警告,內(nèi)存全清零,并可以對(duì)它進(jìn)行某個(gè)元素的讀寫(xiě),但如果下標(biāo)索引過(guò)大可能引起內(nèi)存讀寫(xiě)錯(cuò)誤。
?
在定義數(shù)組時(shí)可以不指定數(shù)組長(zhǎng)度,而只指定數(shù)組內(nèi)容。也可既指定長(zhǎng)度,又指定數(shù)組內(nèi)容。
?
C語(yǔ)言中的定義的多維數(shù)組是定長(zhǎng)的,不像Java那樣可以在定義時(shí)不指定多維數(shù)組長(zhǎng)度,而指定不同長(zhǎng)度的維度內(nèi)容,如果C中如此定義,則列的長(zhǎng)度為某個(gè)維度中最長(zhǎng)的長(zhǎng)度。
?
如果在C語(yǔ)言要定義多維不定長(zhǎng)的數(shù)組,則只能通過(guò)指針的形式來(lái)指定多維數(shù)組,即數(shù)組里的非第一維采用指針形式定義,如字符串指針數(shù)組。
?
C語(yǔ)言中的字符串可以使用一個(gè)最末元素為’\0’的空字符來(lái)定義。也可將一個(gè)字符串直接賦值給一個(gè)數(shù)組。
?
定義多維數(shù)組時(shí),除了第一維不需要指定大小外,其他維都需要指定數(shù)組大小。
?
Java在聲明一個(gè)數(shù)組時(shí),不能指定數(shù)組大小,這與C不同,在new時(shí)可以省略后面的維度大小,不能省略前面而指定后面大小: int? b[][][]= newint[1][][];也可以這樣:int a[][][] = { { { 1 }, { 2, 3 } } };C語(yǔ)言只允許以后面這樣形式定義: int a[][1][1] ={{{1}}};只允許省略第一維大小(在有初始化的情況下,如果定義時(shí)未馬上初始化,則第一維也不能省略),也可都不省略,但最好別省略,且初始化時(shí)定義時(shí)大小與初始化的大小一致,否則容易出問(wèn)題。
?
如果初始化值的個(gè)數(shù)少于數(shù)組元素的個(gè)數(shù),剩余的元素被自動(dòng)初始化為0(多維數(shù)組也是這樣),例如,可以用下面的語(yǔ)句將數(shù)組n的元素初始化為0int a[10]={0};。但千萬(wàn)要記住:數(shù)組的元素不會(huì)被自動(dòng)初始化為0——程序員至少要把第一個(gè)數(shù)組元素初始為0才能使剩下的元素自動(dòng)初始化為0
?
C語(yǔ)言不檢查數(shù)組是否越界
?
如下的數(shù)組聲明會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤,因?yàn)閿?shù)組元素只有5個(gè)而初始化值卻有6個(gè):int a[5] = { 1, 2, 3, 4, 5, 6 };,初始化值列表中的初始化值個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)是一種語(yǔ)法錯(cuò)誤。
?
如果在聲明帶有初始化值列表的數(shù)組時(shí)省略數(shù)組的大小(如果沒(méi)有初始化列表則不能省略),那么數(shù)組元素的個(gè)數(shù)就是初始化列表中的元素個(gè)數(shù),例如:int a[] = { 1, 2, 3, 4, 5, 6 };,建立一個(gè)有6個(gè)元素的數(shù)組。
?
聲明為static的數(shù)組是在編譯時(shí)一次性初始化的,如果程序員沒(méi)有明確地初始化靜態(tài)數(shù)組,那么編譯器把它初始化為0
?
數(shù)組實(shí)際上就是數(shù)組的第一個(gè)元素的地址:
int main(int argc, char * argv[]) {
??? char array[5];
??? printf("%p \n", array);//0022FF4B
??? printf("%p \n",&array[0]);//0022FF4B
??? return 0;
}
轉(zhuǎn)換說(shuō)明符%p通常用來(lái)以十六進(jìn)制格式輸出地址。
?
數(shù)組通過(guò)引用進(jìn)行參數(shù)傳遞會(huì)提高性能。如果用傳值的方式傳遞數(shù)組就會(huì)傳遞每一個(gè)元素的值拷貝。對(duì)于頻繁傳遞的大型數(shù)組來(lái)說(shuō),對(duì)數(shù)組進(jìn)行拷貝會(huì)消耗一定時(shí)間與內(nèi)存。
?
數(shù)組作為參數(shù)聲明時(shí),可以不必定義數(shù)組的大小,如果即使包括了,編譯器會(huì)把它忽略掉對(duì)多維數(shù)組來(lái)說(shuō),第一個(gè)下標(biāo)也是不必要的,但是要給出其后所有的下標(biāo),編譯器用這些下標(biāo)確定這些元素在內(nèi)存中的位置。
?
C語(yǔ)言也會(huì)忽略函數(shù)原型(使用前的聲明)中的變量名。切記:函數(shù)原型只是告訴編譯器出現(xiàn)在函數(shù)中的參數(shù)的個(gè)數(shù)和參數(shù)的類(lèi)型。
?
多維數(shù)組也可這樣定義:int array[2][3] = { 1, 2, 3, 4, 5 };這樣像一維那樣,它會(huì)按照順序先初始化第一行,再初始化第二行,這里最后一個(gè)元素 array[1][2] 未被初始化,所以為0
?
在將多維數(shù)組做為函數(shù)的參數(shù)時(shí),第一個(gè)下標(biāo)也是不必要的(如果寫(xiě)了編譯器也會(huì)忽略掉),但是要給出其后其他所有的下標(biāo),因?yàn)榫幾g器要用這些下標(biāo)確定這些元素在內(nèi)存中的位置,不管數(shù)組的下標(biāo)有多少個(gè),所有的元素都是在內(nèi)存中連續(xù)存放的,所以編譯要根據(jù)第一個(gè)下標(biāo)后面所其他下標(biāo)來(lái)定位元素(定位時(shí)需要跳過(guò)多少個(gè)元素)void printArray(int a[][3])
?
多維數(shù)組的數(shù)組名為第一維中第一個(gè)元素(可能又是一個(gè)多維數(shù)組)的地址。

extern


如果程序包含在多個(gè)源文件中,而某個(gè)外部(全局)變量在file1文件中定義、在file2file3文件中使用,那么在文件file2file3中就需要使用extern聲明來(lái)建立該變量與其定義之間的聯(lián)系。

“定義”與“聲明”


“定義”表示創(chuàng)建變量或分配存儲(chǔ)空間,而“聲明”指的是說(shuō)明變量的性質(zhì),但不分配存儲(chǔ)單元。
下面即是聲明:int lower,upper,step;
?
聲明用于說(shuō)明每個(gè)標(biāo)識(shí)符的含義,而并不需要為每個(gè)標(biāo)識(shí)符預(yù)留存儲(chǔ)空間,預(yù)留存儲(chǔ)空間的聲明稱(chēng)為定義。

變量命名規(guī)則


Java一樣 A$0
標(biāo)準(zhǔn)規(guī)定,標(biāo)識(shí)符前至少31個(gè)字符有效,在某些實(shí)現(xiàn)中,有效字符可能會(huì)更多。

數(shù)據(jù)類(lèi)型


char
int
float
double
short (int)
long (int)
float
double
long double
?
int通常代表特定機(jī)器中整數(shù)的自然長(zhǎng)度。short類(lèi)型通過(guò)為16位,long類(lèi)型通常為32位,int類(lèi)型可能是1632。各編譯器可以根據(jù)硬件特殊自主選擇合適的類(lèi)型長(zhǎng)度,但要遵循下列限制:shortint類(lèi)型至少為16位,而long類(lèi)型至少為32位,并且short類(lèi)型不得長(zhǎng)于int類(lèi)型,而int類(lèi)型不得長(zhǎng)于long類(lèi)型
?
類(lèi)型限定符signedunsigned可以限定char類(lèi)型或任何整型。
?
有關(guān)這些類(lèi)型長(zhǎng)度定義的符號(hào)常量以及其他與機(jī)器和編譯有關(guān)的屬性可以在標(biāo)準(zhǔn)頭文件<limits.h><float.h>中找到。
?
c++bool類(lèi)型,標(biāo)準(zhǔn)C沒(méi)有布爾類(lèi)型,用整型代替布爾類(lèi)型,非0表示真,0表示假
?
整型常量若以字母uU為后綴,則表示它是一個(gè)無(wú)符號(hào)數(shù);若以字母1L為后綴,則表示它是一個(gè)長(zhǎng)整型數(shù);若以字母UL為后級(jí),則表示它是一個(gè)無(wú)符號(hào)長(zhǎng)整型數(shù)
?
整型常量的類(lèi)型同它的形式、值和后輟有關(guān)。如果它沒(méi)有后綴且是十進(jìn)制表示,則其類(lèi)型很可能是intlong intunsigned long int如果它沒(méi)有后綴且是八進(jìn)制或+六進(jìn)制表示,則其類(lèi)型很可能是intunsigned intlong intunsigned long int如果它的后緩為uU,則其類(lèi)型很可能是unsigned intungigned long int果它的后緩為lL,則其類(lèi)型很可能是unsigned intungigned long int
?
C中的整型常量默認(rèn)都是int類(lèi)型的常量,但如果一個(gè)整數(shù)太大以至于無(wú)法用int類(lèi)型表示時(shí),也將被當(dāng)作long類(lèi)型處理。
?
無(wú)符號(hào)常量以字母uU結(jié)尾。后綴ulUL表示是 unsigned long類(lèi)型,通常用在八進(jìn)制或十進(jìn)制常量后面來(lái)標(biāo)示最高位到底是符號(hào)位還是數(shù)字位,而用在十進(jìn)制后也是一樣
?
沒(méi)有后綴的浮點(diǎn)數(shù)常量為double類(lèi)型,后綴fF表示float類(lèi)型,而后綴lL則是表示long double類(lèi)型
?
八進(jìn)制使用0開(kāi)頭,十六進(jìn)制使用0X開(kāi)頭。
?
0XFF=255?????? char
0XFFFF=65535?? short
0XFFFFFFFF=-1? int
如果十六進(jìn)制常量位數(shù)不達(dá)到整型int所占位數(shù)時(shí),常量首位被看作數(shù)字位,而非符號(hào)位,如果超過(guò)int,則按long來(lái)處理
?
unsigned short a=0xFFFF ,則a=65535,但如果去掉unsigned修飾符后,a=-1,這也從另一方面驗(yàn)證了“整型常量默認(rèn)都是int類(lèi)型的常量
??? unsignedshort a1 = 0xFFFF;
??? short a2 = 0xFFFF;
??? printf("%d \n", a1);//65535
??? printf("%d \n", a2);//-1
??? printf("%d \n", 0xFFFF);//65535
?
??? unsignedshort a3 = -1;
??? short a4 = -1;????????????
??? printf("%d \n", a3);//65535
??? printf("%d \n", a4);//-1
??? printf("%d \n", -1u);//-1
?
C中可以將大的數(shù)據(jù)類(lèi)型賦給小的數(shù)據(jù)類(lèi)型(比如將long賦值給short類(lèi)型的變量),不像Java那樣需要強(qiáng)轉(zhuǎn):否則非法。
?
?
當(dāng)把較長(zhǎng)的整數(shù)轉(zhuǎn)換為較短的整數(shù)或char類(lèi)型時(shí),超出的高位部分將被丟棄。如將一個(gè)float類(lèi)型賦值給一個(gè)int類(lèi)型變量時(shí),小數(shù)部分將被截取掉;但當(dāng)把double類(lèi)型賦值給float類(lèi)型時(shí),是進(jìn)行四舍五入還是截取這取決于具體實(shí)現(xiàn)。
?

算術(shù)類(lèi)型提升與轉(zhuǎn)換規(guī)則


首先,如果任何一個(gè)操作數(shù)為 long double 類(lèi)型,則另一個(gè)操作數(shù)轉(zhuǎn)換為 long double 類(lèi)型。
否則,如果任何一個(gè)操作數(shù)為 double 類(lèi)型,則將另一個(gè)操作數(shù)轉(zhuǎn)換為 double 類(lèi)型。
否則,如果任何一個(gè)操作數(shù)為 float 類(lèi)型,則將另一個(gè)操作數(shù)轉(zhuǎn)換為 float 類(lèi)型。
否則,如果任何一個(gè)操作數(shù)為 unsigned long int 類(lèi)型,則將另一個(gè)操作數(shù)轉(zhuǎn)換為 unsigned long int類(lèi)型。
否則,如果一個(gè)操作數(shù)為 long int 類(lèi)型且另一個(gè)操作數(shù)為 unsigned int 類(lèi)型,則結(jié)果依賴(lài)于long int類(lèi)型是否可以表示所有的unsigned int類(lèi)型的值。如果可以,則將unsigned int類(lèi)型的操作數(shù)轉(zhuǎn)換為long int;否則將兩個(gè)操作數(shù)都轉(zhuǎn)換為usigned long int
否則,如果一個(gè)操作數(shù)為long int類(lèi)型,則將另一個(gè)操作數(shù)轉(zhuǎn)換為long int類(lèi)型。
否則,如果任何一個(gè)操作數(shù)為unsigned int類(lèi)型,則將另一個(gè)操作數(shù)轉(zhuǎn)換為unsigned int類(lèi)型。
否則,將兩個(gè)操作數(shù)都轉(zhuǎn)換成int類(lèi)型。
?
注,表達(dá)式中float類(lèi)型的操作數(shù)不會(huì)自動(dòng)轉(zhuǎn)換成double類(lèi)型(在沒(méi)有double類(lèi)型操作數(shù)的情況下,與int類(lèi)型不同)
?
假定int類(lèi)型占有16位,long類(lèi)型占32位,那么,-1L>1UL,這是因?yàn)?/span>-1L將被提升為unsigned long類(lèi)型,因而成為一個(gè)比較大正數(shù)。

void


void對(duì)象的(不存在的)值不能夠以任何方式使用,也不能被顯式或隱式地轉(zhuǎn)換為任一非空類(lèi)型。因?yàn)榭?/span>(void)表達(dá)式表示一個(gè)不存在的值,這樣的表達(dá)式只可以用在不需要值的地方
可以通過(guò)強(qiáng)制類(lèi)型轉(zhuǎn)換將表達(dá)式轉(zhuǎn)換為void類(lèi)型。

\000\xhh


\000最大字符可表示為 \377,第一位不能大于3(在有三位的情況下),因?yàn)橐坏┐笥?#xff0c;則表示的總位數(shù)會(huì)大于8位。注,也可只使用28進(jìn)制位來(lái)表示,則此時(shí)第一位就可以使用大于3的數(shù)表示了,另外也可只有一位,比如空字符 \0
\378此時(shí)表示兩個(gè)字符 \37 8
\xhh一樣,最多兩位,也可以只有一位十六進(jìn)制。

ANSI C中所有轉(zhuǎn)義字符


\a?? 響鈴
\b?? 回退
\f??? 換頁(yè)
\n?? 換行
\r??? 回車(chē)
\t??? 橫向制表
\v?? 縱向制表
\\
\\?
\’
\”
\000
\xhh

\0


字符常量 ‘\0’ 表示值為0的字符,也就是空字符(null),但我們通常用 ‘\0’ 的形式代替 0 ,以強(qiáng)調(diào)某些表達(dá)式的字符屬性,但其數(shù)字值為0
?

轉(zhuǎn)載于:https://www.cnblogs.com/jiangzhengjun/p/4255830.html

總結(jié)

以上是生活随笔為你收集整理的[C程序设计语言]第一部分的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。