C語言基礎知識整理

2021-08-19 19:55:19 字數 2900 閱讀 7324

一、

關於sizeof和strlen。sizeof()用於計算某型別或者某變數在記憶體中所佔空間。比如整數分為short型,int型,long整型,分別佔2,2/4,4個位元組,int型具體占用幾個位元組和編譯系統有關。我們輸入字串時通常用char陣列:

char s[10];

scanf(「%s」,s);

輸入的字串可能是中英文混雜的,英文就是乙個個字母,乙個字母就是乙個char,佔乙個位元組。而乙個漢字占用兩個位元組,這兩個位元組是連續的,每個位元組最高位是1.所以可以依據這個判斷乙個字串裡面有多少漢字。

l=strlen(s);  //這裡用strlen,只是字串長度(以位元組為單位),不包括/0

for(num=i=0;i#include #include using namespace std;

int main(void)

; char b = "hello";//定義字串

char c = ;

char *p = b;

cout << a << endl;

cout << b

string其實是乙個類,而不是資料型別。string的指標指向string物件,而不是第乙個字元。

二者之間是可以相互轉換的。

l  說到類,其實類就是乙個構造資料型別,即用已經定義好的資料型別重新構造的新的資料型別。除了類,還有陣列型別,結構體型別,列舉型別,聯合體型別。

c語言中的結構體型別和c++中的類型別基本相同,只不過預設的限定符不同,c語言預設public,c++預設private

l  c++的麻煩之處就在於呼叫變數的方式。可以使用變數名,可以使用指標,還可以使用引用。程式實際是由函式構成的,包括多個子函式和乙個主函式。而函式中引數的傳遞一般是按照值傳遞的,按照值的意思是會建立乙個變數的副本,這個副本的值和引數的值相等。這樣副本的值在函式中改變的話並不會改變原來的變數的值。

l  引用型別,在定義的時候在變數前面加乙個&:

int a;

int&b=a;&c=a;  //b,c是a的兩個引用

引用變數是乙個變數的別稱,沒有分配新的記憶體空間,這樣改變變數的值,所有的引用變數的值都會改變。

l  說到函式與變數,還有乙個概念那就是全域性變數和區域性變數,判斷的標準就是變數的定義放在函式外面還是函式內部。但全域性變數和區域性變數的區別沒有這麼簡單,全域性變數分配的空間位於記憶體空間中的「堆」,堆的訪問速度慢,空間大;區域性變數的空間位於記憶體中的「棧」,棧訪問速度快,空間小。而且全域性變數定義時有預設的初始值,比如整型全域性變數的預設初始值是0.

l  全域性變數在所有函式中都可以訪問,所以如果引數傳遞是引用的話,會在函式中造成改變,影響其他函式,所以不經常使用全域性變數。而在堆中有空間大的優勢,所以當我們要定義乙個大的陣列時,可以用靜態變數。

l  靜態變數以static限定符修飾。即便定義在函式體內部,程式跳出時依然存在,而且保持原來的值不變。靜態變數的乙個特點是只定義一次,只在函式首次呼叫時被定義,所以可以利用這個特點記錄函式被呼叫的次數:在函式體中定義static int count=0;

count++;             靜態變數也預設初始化為0

l  陣列的初始化。定義的時候如何沒有同時對陣列中任何乙個元素賦初值,那麼陣列中每乙個元素的值都是不確定的。注意這裡的同時和任何。同時強調的是只能從頭開始連續賦值,任何強調的是其餘未賦值的會初始化為0.

#include#includeusing namespace std;

int main()

cout << endl;

} cout << "\n";

cout << "case:2" << endl;

for (i = 0; i < 4; i++)

cout << endl;

} cout << "\n";

cout << "case:3" << endl;

for (i = 0; i < 4; i++)

cout << endl;

} getchar();

return 1;

}

	#define _crt_secure_no_warnings

#includeint main()

l  上機考試總會有測試用例,測試用例都存放在檔案中,這就需要從檔案中讀取資料。

while(scanf(「%d%d」,&a,&b)!=eof)

eof實際是乙個巨集定義,等於-1,意思是end of file。而scanf讀到檔案尾也會返回-1.這時候才跳出迴圈。scanf讀取資料成功時,會返回成功讀取的資料的個數

l  在迴圈體中要想讀入資料顯示出來,有格式化輸入輸出函式scanf("《格式化字串》", 《位址表》);printf("《格式化字串》",《參量表》);還有非格式化輸入輸出函式gets(字元陣列名或指標);puts()。後者占用記憶體更小,且可以讀入空格,直到回車終止。scanf遇到空格會停止,並在後面加終止符\0。puts()在輸出字串時會將』\0』自動轉換成』\n』進行輸出,也就是說,puts方法輸出完字串後會自動換行。

scanf遇到空格、tab、回車時自動加\0停止輸入,但之後的空格和回車仍然在緩衝區,會讀入到之後的getchar中。為了避免這個問題,可以在兩次輸入之間插入乙個getchar()把這個回車符吃掉。或者在scanf的時候多寫乙個%*c,讀取最後乙個回車符,但是不把它賦予任何變數。

gets:可接受回車鍵之前輸入的所有字元,並用』\0』替代『\n』.回車鍵不會留在輸入緩衝區中

scanf 函式報錯 error c4996: 'scanf',因為vs認為c標準函式不安全。可以依照提示新增乙個巨集定義

l  gets時不需要考慮eof

char str[10];

while(gets(str))

c語言基礎知識整理

1 sizeof表示獲取乙個變數或一種資料型別佔幾個位元組 2 d表十進位制有符號整數 3 表示賦值,不表示相等 表示相等 4 變數 char字元型別變數short短整型 int整型long長整型 long long長長整型 float單精度浮點數 4個位元組 double雙精度浮點數 8個位元組 ...

C語言基礎知識整理 四

進行巨集字串連線,在巨集中把引數解釋為字串,不可以在語句中直接使用。在巨集定義中,printf s n s 會被解釋為printf s n s include include define trace s printf s n s s int main 輸出為a strhello 在第三次列印中,巨...

C語言相關基礎知識整理

因為馬上要進行的軟體測試技術課程的考試中,題目中的程式會用c語言來編寫。目前我們還沒有系統的學習過c語言,其中的很多知識還是和c 有很大不同的,所以在這裡整理一下關於c語言中資料型別的相關基礎知識,來為考試做準備 參考 一 概述 其中 1.短整形 short a 1 2.整形 一般佔4個位元組 32...