C語言基礎總結

2022-09-07 15:54:10 字數 2821 閱讀 3545

本文為c語言基礎知識的總結,並非教程,適合有基礎的猿們進行複習之用。

1、static(靜態)變數有什麼作用?

① static全域性變數和普通全域性變數相比的區別在於static全域性變數只初始化一次,這樣做的目的是為了防止在其他檔案單元中被引用;

② static區域性變數和普通區域性變數的區別是static區域性變數只被初始化一次,下一次的運算依據是上一次的結果值;

③ static函式與普通函式的區別在於作用域不一樣,static函式只在乙個原始檔中有效,不能被其他原始檔使用;

④ 對於所有物件(不僅僅是靜態物件),初始化都只有一次,而由於靜態變數具有「記憶」功能,初始化後,一直都沒有被銷毀,都會儲存在記憶體區域中,所以不會再次初始化。(記住:初始化語句只執行一次);

j**a中也有const,但是只是作為預留字而非關鍵字(也就是不能使用)。c語言的const修飾普通變數和j**a中的final是一回事。

① const定義的是常量,表示不可變

② 進行型別檢查,使編譯器對處理內容有更多的了解,消除了一些隱患

③ 提高了程式的效率。編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯器間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高

const void *a

這是定義了乙個指標a,a可以指向任意型別的值,但它指向的值必須是常量。在這種情況下,我們不能修改被指向的物件,但可以使指標指向其他物件。

void* const a

這是定義了乙個const指標a,a可以指向任意型別的值,但a是指向某個物件的常量指標。我們不能修改指標中儲存的位址,但可以修改指標指向的物件。

3、define和const的區別

4、關於main函式

5、new/delete與malloc/free的區別是什麼?

malloc/free是c/c++語言的標準庫函式,在c語言中需要標頭檔案的支援,new/delete是c++的運算子。對於類的物件而言,malloc/free無法滿足動態物件的要求,物件在建立的同時要自動執行建構函式,物件消亡的之前要自動執行析構函式,而malloc/free不在編譯器控制許可權之內,無法執行建構函式和析構函式。

具體而言,new/delete和malloc/free的區別:

1)new能夠自動計算需要分配的記憶體空間,而malloc需要手工計算位元組數。

2)new和delete直接帶具體型別的指標,malloc和free返回void的指標。

3)new是型別安全的,而malloc不是。

4)new一般由兩步構成,分別是new操作和構造。new操作對應於malloc,但new操作可以過載,可以自定義記憶體分配策略,不做記憶體分配,甚至分配到非記憶體裝置上,而malloc不行。

5)new將呼叫建構函式,而malloc不能;delete將呼叫析構函式,而free不能。

6)malloc/free需要庫函式stdlib.h的支援,而new/delete不需要

需要注意的是,有資源的申請,就有資源的釋放,否則就會出現資源洩漏的問題,所以new/delete,malloc/free必須配對使用。而delete和free被呼叫後,記憶體不會立即收回,指標也不會指向空,delete或free僅僅是告訴作業系統,這一塊記憶體被釋放了,可以用做其他用途。但是,由於沒有重新對這塊記憶體進行寫操作,所以記憶體中的變數數值並沒有發生變化,出現野指標的情況。因此,釋放完記憶體後,應該將指標指項置為空。

6、指標和陣列是否表示同一概念?

主要表現在以下兩方面的不同:

1)修改內容不同。

例如,char a=「hello」,可以通過去下標的方式對其進行修改,而對於char *p=「word」,此時p指向常量字串,所以p[0]='x』是不允許的。

2)所佔位元組數不同

例如,char *p=「world」,p為指標,則sizeof§得到的是乙個指標變數的位元組數,而不是p所指的記憶體容量。

char a=「hello world」;

char *p=a;

在32位機器上,sizeof(a)=12位元組,而sizeof§=4位元組。

但要注意的是,當陣列作為函式引數進行傳遞時,該陣列自動退化為同型別的指標。

7、野指標?空指標?

8、#include和#include"filename.h"有什麼區別?

對於#include,編譯器先從標準庫路徑開始搜尋filename.h,然後從本地目錄搜尋,使得系統檔案呼叫較快。而對於#include"filename.h",編譯器先從使用者的工作路徑開始搜尋filename.h,後去尋找系統路徑,使得自定義檔案較快。

9、c語言和c++中struct的區別

10、函式指標和指標函式的區別

指標函式是指帶指標的函式,本質上是乙個函式,函式返回型別是某一型別的指標。其形式一般如下所示:

型別識別符號 *函式名(引數列表)
例如,int * f(x,y),它的意思是宣告乙個函式f(x,y),該函式返回型別為int型指標

而函式指標是指向函式的指標,即本質是乙個指標變數,表示的是乙個指標,它指向的是乙個函式。其形式一般如下所示:

型別說明符 (*函式名)(引數)
例如,int (*pf)(int x)它的意思就是宣告乙個函式指標,而pf=func則是將func函式的首位址賦值給指標。

關於c語言的指標,請看:

c語言中的指標和p, p+1, *(p+1), *p+1, p[0], &p[0] 的含義:

c 語言基礎總結

1.strlen和sizeof區別?因為sizeof值在編譯時確定,所以不能用來得到動態分配 執行時分配 儲存空間的大小。sizeof type sizeof expr 2.陣列和指標 使用陣列的時候編譯器會把他轉換為指標。因此在一些情況下陣列的操作實際是指標的操作。使用陣列作為auto變數的初始值...

C語言基礎總結

常用的資料型別 基於32位作業系統 void 宣告函式無返回值或無引數 空型別 1 char 字元型型別資料 1 int 整型資料 4 float 單精度浮點型資料 4 double 雙精度浮點型資料 8 short 短整型資料 2 long 長整型資料 4 long long 長長整型資料 8 l...

C語言基礎總結1

c語言基礎資料型別 int 4位元組 記憶體 short 2位元組 記憶體 char 1位元組 記憶體 float 4位元組 記憶體 定義變數 int a 5 int b 3 int c a b 表示式是由,變數,常量,運算子組成的有結果的式子。如 上面的 c a b c語言中的輸入和輸出 scan...