C語言常見知識小計

2021-10-03 18:57:32 字數 936 閱讀 5762

malloc和new的區別

主要從:申請記憶體所在位置、返回型別安全性、記憶體分配失敗時的返回值、是否需要制定記憶體大小 這四個方面進行區分:

申請的記憶體所在位置不同new操作符從自由儲存區(free store)上為物件動態分配記憶體空間。自由儲存區是c++基於new操作符的乙個抽象概念,凡是通過new操作符進行記憶體申請,該記憶體即為自由儲存區。malloc函式從堆上動態分配記憶體。堆是作業系統中的術語,是作業系統所維護的一塊特殊記憶體,用於程式的記憶體動態分配,c語言使用malloc從堆上分配記憶體,使用free釋放已分配的對應記憶體。

返回型別安全性不同new操作符記憶體分配成功時,返回的是物件型別的指標,型別嚴格與物件匹配,無須進行型別轉換,故new是符合型別安全性的操作符。malloc記憶體分配成功則是返回void * ,需要通過強制型別轉換將void*指標轉換成我們需要的型別。

記憶體分配失敗時的返回值不同new記憶體分配失敗時,會丟擲bac_alloc異常,它不會返回null。malloc分配記憶體失敗時返回null

使用new操作符申請記憶體分配時無須指定記憶體塊的大小,編譯器會根據型別資訊自行計算。malloc則需要顯式地指出所需記憶體的尺寸。

strlen和sizeof的區別

sizeof是算符,strlen是函式。 陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符』\0』為止,然後返回計數器值(長度不包含』\0』)。sizeof操作符的結果型別是size_t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。

他們倆的區別就是是否把最後的結束標誌也加上去。strlen是不加的,他表示字串的長度。而sizeof求的是字串在記憶體中的長度,所以它是加上最後的』\0』的,所以一般而言後者的長度會比前者多1。

小計 C語言中的陣列

一 一維陣列 1.建立和初始化 int arr 3 2.使用 陣列是使用下標來訪問的 3.儲存 陣列在記憶體中是連續存放的 可以通過將陣列的每乙個元素位址列印出來,進行驗證。4.陣列的指標訪問 重要的,陣列的陣列名是陣列首元素的位址 而且,通過對陣列名 整數的運算,其實可以獲取到陣列每個元素的位址 ...

Spring知識小計1

取值範圍 說明singleton 這是預設值,單例 prototype 多例request web 專案中,spring 建立乙個 bean 的物件,將物件存入到 request 域中 session web 專案中,spring 建立乙個 bean 的物件,將物件存入到 session 域中 gl...

c語言常見基礎知識(二)

1 內聯函式 2 具有預設引數值和引數個數可變的函式 3 函式過載 4 陣列 用區域性static 或全域性定義的陣列不賦初值,系統均預設其為 0 static int a 10 即儲存在靜態資料區中的陣列其元素預設為0 用static 定義的陣列不賦初值,系統均預設其為 0 static int ...