malloc calloc 等記憶體分配函式所獲得的記憶體塊都來自乙個稱為堆(heap)的儲存池。
記憶體洩漏(memory leak)是指程式中己動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。記憶體洩漏缺陷具有隱蔽性、積累性的特徵,比其他記憶體非法訪問錯誤更難檢測。
void *型別的指標可以與任意型別的指標之間進行強制轉換,其中包括二級指標(雙指標)及以上。
1). sizeof可確定陣列的長度.
例如:定義整型陣列 a[10] 則陣列a的長度為:sizeof(a)/sizeof(a[0])
該表示式更多應用於不知道陣列a大小的前提下,即定義時不指明陣列長度:int a[ ]=; 此時可快速確定其長度。
因表示式過於繁瑣,可用乙個巨集來表示:#define size (sizeof(a)/sizeof(a[0]))
qsort的原型:
void qsort(void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *));
qsort函式使用快速排序,排序效率比較高。
其中,base指向需要排序區域的第乙個元素,nmemb是要排序的元素的數量,size是每個陣列元素的大小,compar是指向比較函式的指標,比較函式需要自行編寫,注意比較函式的形參型別為 void *,進行比較時要進行強制轉換。比較函式的返回型別為整型(正數、負數或0)。
注意:若返回值小於 0 ,則 p 所指元素排在 q 所指元素前面
若返回值大於 0 ,則 p 所指元素排在 q 所指元素後面
若返回值等於 0 ,則 p 所指元素和 q 所指元素的位置不確定
例如,對一維整型陣列進行由小到大排序:
int compare(const void *a,const void *b)
由大到小排序:
int compare(const void *a,const void *b)
在一條語句中函式的傳遞通過棧結構來實現,即先入後出。
#includeint i=1;
void add(int a,int b);
int f(void);
int main()
void add(int a,int b)
int f(void)
在該示例中,函式 f 被呼叫兩次,最終的輸出結果為:3 2 證明了其呼叫過程為從右向左,符合棧的特徵(入棧為從左向右)。這一特徵不侷限於呼叫同乙個函式,本例只呼叫乙個函式是因為......懶。
使用malloc或calloc函式動態分配的記憶體可能出現過大或者過小的問題,因該記憶體已存入相關資料,進行整體的轉移並不容易,故可使用realloc函式對該記憶體進行重新分配。
realloc函式的原型:
void *realloc(void *ptr,size_t size);
其中ptr必須指向由malloc或calloc等函式動態分配所產生的記憶體,size表示新記憶體的大小。
realloc函式對記憶體的重新分配是在原記憶體的基礎上直接進行擴大或縮減,不會影響到資料在原記憶體中的儲存,即不需要移動資料。當無法在原記憶體的基礎上直接擴大時,realloc函式會在別處分配新的記憶體塊,之後將原記憶體中的資料複製到新記憶體中。因此,當記憶體塊移動到其他地方後,要及時釋放原記憶體,避免記憶體洩漏的發生。
#include#include#define n 10
int main()
一些小的知識點
1.recycleview中使用gridlayoutmanager使其有gridview的效果 布局,第乙個引數表示上下文,第二個引數表示 有多少列,如下 rv.setlayoutmanager new gridlayoutmanager this,3 在 布局中還可以修改引數,使其水平布局,那麼那...
一些小知識點(3)
請尊重原創,謝謝!如何讓webview頁面不能下拉,不要露出下拉後面的背景和滑到底之後上滑後面的背景?self.webview.scrollview.bounces no vi檔案儲存退出命令 先按esc鍵 然後輸入 wq 編輯時刪除當前游標所在位置的字元用x,readonly option is ...
一些小知識點2
1.stat函式講解 表頭檔案 include include 定義函式 int stat const char file name,struct stat buf 函式說明 通過檔名filename獲取檔案資訊,並儲存在buf所指的結構體stat中 返回值 執行成功則返回0,失敗返回 1,錯誤 存...