11.?關鍵字和一般標識符有什么不同?
C語言中關鍵字與一般標識符區別:
定義:關鍵字是C語言預定義的特殊單詞(如
int
、for
),有固定含義;標識符是自定義的名稱(如變量名、函數名)。用途:關鍵字用于語法結構,控制程序邏輯;標識符用于命名變量、函數等對象。
限制:關鍵字不可用作自定義名稱,固定不變;標識符可自由命名,但須遵循規則(如字母開頭、數字字母組合)。
總結:關鍵字是內置語法元素,標識符是用戶定義符號。
12.?if語句中的條件表達式可以是任意的合法表達式嗎?Switch語句中break的作用是什么?
?f語句中的條件表達式可以是任意合法表達式嗎?
是的,if條件可以是任意合法表達式,結果被視為真(非0)或假(0)。例如,
if(1)
、if(x > 0)
、if(a && b)
都有效。Switch語句中break的作用是什么?
break
用于跳出switch語句,防止程序繼續執行后續case分支。若無break,會發生“貫穿”(fall-through),執行所有后續代碼直到結束或遇到break。
13.三種循環結構中的條件是循環進行的條件還是循環結束的條件?循環結構中break語句和continue語句的作用是什么,二者有何區別?
三種循環結構中的條件是循環進行的條件還是循環結束的條件?
while:條件是循環進行的條件,真(非0)則繼續,假(0)則結束。
do-while:同while,條件為繼續執行的依據,假則停止,但至少執行一次。
for:條件是循環進行的條件,真則進入循環體,假則終止。
循環結構中break和continue的作用及區別?
break:立即跳出整個循環,結束循環執行,轉到循環后代碼。
continue:跳過本次循環剩余部分,直接進入下一次循環。
區別:break終止循環,continue只跳過當前輪次,繼續后續迭代。
14.?字符數組與字符串是否相同?
不完全相同,二者有區別。
區別:
定義:
字符數組:存儲字符的數組,如
char arr[5] = {'a', 'b', 'c'}
,無需\0
。字符串:以
\0
結尾的字符數組,如char str[] = "abc"
(含\0
)。結束標志:
字符數組:沒有強制要求結束符,可存任意字符。
字符串:必須以
\0
結束,表示字符串終止。使用:
字符數組:可作為普通數組操作,不一定能用字符串函數。
字符串:專為字符串函數(如
strlen
、strcpy
)設計,依賴\0
。
?15.?函數的嵌套調用與遞歸調用有什么區別?
總結:嵌套是多函數層級調用,遞歸是自我重復調用,機制和目的不同。
嵌套調用示例:main() -> func1() -> func2(),執行完逐層返回。
遞歸調用示例:factorial(n)調用factorial(n-1),需棧管理,易溢出。
16.?結構體類型與我們前面學過的基本類型有哪些區別?
結構體類型與基本類型的區別:
從定義上看,基本類型是C語言內置單一數據類型,如int、char、float,而結構體類型是用戶自定義復合類型,用struct組合多種數據,如struct {int a; char b;};
從數據結構上看,基本類型存儲單一值,結構體類型含多個成員存儲一組相關數據;
從內存分配上看,基本類型大小固定,如int占4字節,結構體類型大小由成員總和決定并可能有內存對齊;
從使用方式上看,基本類型直接操作,如int x = 5,結構體類型通過.或->訪問成員,如struct S s; s.a = 5。
17. 指針與地址有什么聯系?在使用指針的過程中應注意哪些細節?指針類型對于程序設計有哪些意義?
1. 指針與地址的聯系
地址 是內存中某個變量的具體存儲位置。
指針 是一個變量,它的值是另一個變量的地址。簡單來說,指針存儲的是地址,指向內存中的某個位置。
2. 使用指針時應注意的細節
在使用指針時,需要特別注意以下幾點,以確保程序的正確性和安全性:
初始化:指針在使用前必須初始化,否則可能指向隨機內存地址,導致程序崩潰或數據損壞。
解引用:通過解引用操作符(
*
)訪問指針指向的內存時,必須確保指針指向的是有效地址。類型:指針有類型(如
int*
、char*
),它決定了所指向變量的類型,影響解引用時數據的解釋。指針算術:可以對指針進行加減運算(如
+1
、-1
),移動到相鄰內存單元,但要避免超出分配的內存范圍。NULL指針:將指針設為
NULL
表示它不指向任何有效地址,可避免意外解引用。3. 指針類型對程序設計的意義
指針類型在程序設計中具有重要作用,具體體現在以下幾個方面:
動態內存分配:通過
malloc
或calloc
等函數,指針可以在運行時分配內存,適合處理大小不確定的數據。函數參數傳遞:指針實現按引用傳遞,使函數能夠修改調用者的變量。
數據結構:鏈表、樹、圖等復雜數據結構依賴指針連接各個節點。
數組和字符串:在C語言中,指針常用于操作數組和字符串,提供靈活性。
硬件訪問:在底層編程中,指針可直接訪問硬件寄存器或內存映射設備。
總結
指針是地址的載體,使用時需關注初始化、解引用和類型等細節。指針類型賦予程序動態性、復雜性和底層操作能力,是C語言中強大且關鍵的特性。
18. 指針 VS 引用
指針
存儲變量的內存地址,可初始化為
nullptr
,可重新指向其他對象通過
*
解引用訪問數據,支持指針算術(如ptr+1
移動到下一元素)用途:動態內存分配(
new
/delete
)、數組操作、實現多態(基類指針指向派生類)引用
已存在變量的別名,定義時必須綁定對象,無法重新綁定其他對象
直接使用(如
ref = 5
即修改原對象),無需額外操作符,語法簡潔用途:函數按引用傳遞(修改原數據或避免拷貝)、返回值、操作符重載
19.?struct和class的區別(C++)
struct在默認訪問權限和繼承方式都是public,而class是private;
除了默認訪問權限和繼承方式外,兩者在功能上完全相同,但struct 偏數據,class 偏對象。
20.?c++模板
泛型編程: 模板允許在編譯期生成針對不同數據類型的代碼,提高代碼復用性和類型安全。
函數模板與類模板:
函數模板:定義一個模板函數,使得同一函數可以操作多種數據類型。
類模板:定義一個模板類,使得同一個類能處理多種類型的數據。
模板特化: 針對特定類型提供定制化實現,分為完全特化和部分特化。
模板元編程: 利用模板在編譯期間進行計算,提高程序的靈活性和效率。