C語言中沒有專門用于儲存字符串的變量類型,字符串都被儲存在char類型的數(shù)組中,數(shù)組是由連續(xù)的存儲單元組成,字符串的字符儲存在相鄰的存儲單元中,每個單元存儲一個字符。
在數(shù)組末尾的字符\0,在C語言中字符串一定以空字符結(jié)束,這就意味著數(shù)組的容量必須至少比帶存儲字符串的字符數(shù)多1位用來存放空字符。
字符串和字符的區(qū)別:單引號用于字符,雙引號用于字符串。例如:字符串“x”和‘x’的區(qū)別如下:
數(shù)組是同種類型數(shù)據(jù)元素的有序序列。
char name[5];//創(chuàng)建一個大小為5的char類型的數(shù)組
int arr[10];//同樣可以創(chuàng)建int類型的數(shù)組,arr數(shù)組有10個int型變量或常量。
strlen()函數(shù)可以計算出字符串中字符長度,使用strlen()函數(shù)需包含
#include#includeint main(void)
{char name[40];//創(chuàng)建字符串?dāng)?shù)組。
printf("what's your name?");
scanf("%s",name);
printf("hello,%s\n",name);
printf("Your name of %zd letters occupies %zd memory cells.\n",strlen(name),sizeof name);
return 0;
}
輸出的結(jié)果為:
what's your name? john bill
hello,join
Your name of 4letters occupies 40 memory cells.
sizeof計算得出數(shù)組的大小,strlen()計算出當(dāng)前字符串的長度,不包括\0在內(nèi)。
sizeof 和 strlen()的區(qū)別
(1)sizeof使一個操作符,strlen()是庫函數(shù),sizeof任意使用,而strlen()使用前需包括頭文件。
(2)sizeof的參數(shù)可以是數(shù)據(jù)的類型,也可以是變量,而strlen()只能以結(jié)尾為‘\0’的字符串作為參數(shù)。
(3)編譯器在編譯時計算出sizeof的結(jié)果,而strlen函數(shù)必須在程序運(yùn)行時才能計算出來。sizeof計算的是數(shù)據(jù)類型占內(nèi)存的大小,而strlen()計算的是字符串實際的長度。
(4)sizeof的參數(shù)為數(shù)據(jù)類型名是必須加括號,參數(shù)若為變量名括號可以省略。
在C語言程序中,程序動輒幾百行,當(dāng)存在一個常量時,如果用數(shù)字的形式來頻繁的使用的話,代碼的可讀性很差,且如果這個常量需要改變的話,需要逐一修改很麻煩。所以為了代碼的可讀性,C語言提供了預(yù)處理器的方法。
//格式
#define NAME value
#define PI 3.1415926
circumference = PI * diameter;
areas = PI * Pi * radius;
代碼在編譯時,所有的PI都將被替換成3.1415926,在程序運(yùn)行階段,程序中所有的替換均已完成。
另一種方式是使用const限定符,const使一個關(guān)鍵字,用于限定一個變量為只讀。
const int MONTHS = 12;//MONTHS在程序中不可更改,值為12
這使得MONTHS成為一個只讀值,可以使用,但是不可更改其值,const 還可用來修飾函數(shù)指針等,后續(xù)會詳細(xì)介紹。
const 和 #define的區(qū)別如下:
#define在編譯的預(yù)處理階段起作用,只是進(jìn)行字符串的替換,并沒有類型檢查等操作,在程序運(yùn)行時,程序每使用一次#define定義的值就會開辟一塊內(nèi)存,容易浪費(fèi)內(nèi)存。程序中使用#define可以使程序簡單明了,通俗易懂。并且代碼的維護(hù)相對容易,在修改定義的值時只需修改定義處即可。
const常量有數(shù)據(jù)類型,在運(yùn)行時會對其進(jìn)行類型安全檢查,const定義的只讀變量在程序運(yùn)行過程中只備份一次,比較節(jié)省空間。
在使用printf()函數(shù)打印數(shù)據(jù)時指令要和待打印的類型相匹配,例如在打印整形數(shù)據(jù)時,不能使用字符的轉(zhuǎn)換字符,C語言有標(biāo)準(zhǔn)的轉(zhuǎn)換說明要求,如下表所示:
int a = 10;
float b = 3.14;
float c = 1.11;
printf("The value of a is %d,and The value of b is %f",a,b);//使用正確的轉(zhuǎn)換說明來讀取對應(yīng)的數(shù)據(jù)類型。
printf("The value of b is %f,The value of c is %f",b);//在使用函數(shù)時,轉(zhuǎn)換說明要和后者數(shù)據(jù)相匹配,是成對出現(xiàn),這是錯誤的示例。
如果想更加細(xì)節(jié)的打印,可在%和轉(zhuǎn)換字符之間插入修飾符可修飾基本的的轉(zhuǎn)換說明。具體如下表所示:
舉例說明:
#includeint main(void)
{float PI = 3.1415926;
printf("%2f",PI);//字符寬度設(shè)為2,原數(shù)據(jù)大于給定寬度,會自動擴(kuò)展到該有寬度。
printf("%10f",PI);//指定字符寬度為10,空余部分用空格補(bǔ)齊
printf("%.2f",PI);//設(shè)置精度,保留小數(shù)后兩位有效數(shù)字
return 0;
}
轉(zhuǎn)換字符是將字符串轉(zhuǎn)換成程序員所需要的數(shù)據(jù)類型,比如數(shù)字76在計算機(jī)中存儲格式是二進(jìn)制01001100,%d,將其轉(zhuǎn)換成字符7和6,顯示為76。%x將其轉(zhuǎn)換為十六進(jìn)制0x4c。所以轉(zhuǎn)換字符的存在就是為了滿足程序員所需要不同類型的數(shù)據(jù)格式。
scanf()函數(shù)scanf()和printf()類似,也是用格式字符串和參數(shù)列表。兩個函數(shù)主要區(qū)別在參數(shù)列表,printf()函數(shù)使用變量、常量和表達(dá)式,而scanf()函數(shù)使用只指向變量的指針。這里有兩條規(guī)則:
如果scanf()讀取基本變量類型的值,在變量名前加&;
如果scanf()把字符串讀入字符數(shù)組中,不需要使用&。
#include//包含頭文件必不可少
int main(void)
{int age;//創(chuàng)建變量
char name[30];
printf("how old are you?");
scanf("%d",&age);
printf("what's your name?");
scanf("%s",name);//這里不適用&
printf("My name is %s,I am %d years old",name,age);
return 0;
}
對于scanf()函數(shù)中的轉(zhuǎn)換說明具體含義如下表所示:
scanf()和printf()函數(shù)在對于轉(zhuǎn)換說明的使用大體相同,主要區(qū)別在于,對于float類型和double類型,printf()使用%f、%e、%E、%g和%G轉(zhuǎn)換說明,而scanf()只把他們用于float類型,對于豆瓣了
類型使用l修飾符。具體標(biāo)準(zhǔn)如下:
更新于2022.12.24
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:C語言《CPrimerPlus》學(xué)習(xí)總結(jié)--第四章-創(chuàng)新互聯(lián)
本文鏈接:http://www.rwnh.cn/article4/cephoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站制作、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容