linux c c 知識點整理 四

2021-07-31 03:44:47 字數 2442 閱讀 9985

當實際長度不夠時, 右對齊;

如果字串或者整數的長度超過說明的場寬, 則按其實際長度輸出;

如果是浮點數, 若整數部分超過了說明的整數字場寬, 則按其實際長度輸出, 若是小數部分超過了說明的小數字場寬, 則按說明的寬度以四捨五入輸出。

例如:printf(「%d %d %d\n」, (a,b,c),b,c);

那麼將輸出才c,b,c這3個值,因為逗號表示式的值就是表示式中最後乙個表示式的值;

即:表示式1,表示式2,表示式3…表示式n 就是表示式n的值。

第乙個字元必須是字母或者下劃線,不能是數字。

dfd圖是結構化方法的需求分析工具。

hast_set以hashtable為底層機制,而set以rb-tree(紅黑果樹)為底層機制;

set有元素自動排序功能,而hash_set沒有;

set可在logn下完成查詢、插入和刪除等操作,hash_set可在常數時間複雜度下完成這些操作,但是取決於雜湊表的負載情況;

hast_multiset則允許鍵值重複;

用途:

static限制變數的作用域;

static不顯示的初始化時,會被隱式的初始化為0;

static設定變數的儲存域,變數儲存在靜態區;

類中使用static的規則:

不能通過類名來呼叫類的非靜態成員函式,可以呼叫靜態成員函式;

類的物件可以使用靜態成員函式和非靜態成員函式;

類的靜態成員函式中不能使用類的非靜態成員,因為此時靜態成員函式已經分配了儲存空間,而非靜態成員卻還沒有分配記憶體,相當於變數宣告了但是未定義就直接使用;

類的非靜態成員函式(包括常函式)可以使用類的靜態成員函式和靜態成員變數,並且非靜態成員常函式可以修改靜態成員變數;

類的靜態成員變數必須初始化以後才能使用;

第一正規化:資料庫表中的所有字段值都是不可分解的原子值,比如位址字段,根據需求拆分成省份和城市更方便

第二正規化:在乙個資料庫表中,乙個表中只能保持一種資料,不可以把多種資料儲存在同一張資料庫表中,比如訂單資訊和商品資訊就要分為兩個表

第三正規化:每一列資料都和主鍵直接相關,而不能間接相關,就是說字段值要和主鍵有直接關係

巴斯-科德正規化:第三正規化的乙個子集,在第一正規化基礎上,任何非主屬性不能對主鍵子集依賴。

1)兩者都可以提高程式的併發度,提高程式執行效率和響應時間

2)執行緒和程序在使用上各有優缺點:執行緒執行開銷小,但不利於資源管理和保護;而程序正相反。

int、short、byte、char、long

基本上可以轉換為整數的型別都可以用作switch的引數。

互斥鎖、訊號量、條件變數、全域性變數、讀寫鎖。

1)互斥鎖:當執行緒a鎖定了互斥變數時,執行緒b再去鎖定時就會被掛起,直到a解鎖。

注意:當執行緒要不斷的去輪詢檢查某個條件以判斷是否可以操作需同步的資料時,可使用條件變數提高效率。

2)訊號量:就是乙個整數,兩個執行緒對整數進行加減來實現訊號量。

3)條件變數:經常和互斥鎖一起使用,使用時,條件變數被用來阻塞乙個執行緒,當條件不滿足時,執行緒會解開相應的互斥鎖並等待條件發生變化,一旦其他的某個執行緒改變了條件變數,它將通知相應的條件變數喚醒乙個或多個正被此變數阻塞的執行緒,這些執行緒將重新鎖定互斥鎖並重新測試條件是否滿足。

pthread_cont_init()

pthread_cont_destroy()

pthread_cont_wait() //執行緒解開mutex指向的鎖並被條件變數阻塞

pthread_cont_timedwait() //多了時間引數,當時間過了以後,即使條件變數不滿足,阻塞也被解除

pthread_cont_signal()/pthread_cont_broadcast //喚醒被條件變數阻塞的執行緒。

4)讀寫鎖:可以多個執行緒同時占用讀模式的讀寫鎖,但是只能乙個執行緒占用寫模式的讀寫鎖。

當讀寫鎖是寫加鎖狀態時,在這個鎖被解鎖前,所有試圖對這個鎖加鎖的執行緒都會被阻塞;

當讀寫鎖是讀加鎖狀態時,其他執行緒可以讀模式得到訪問權,但是以寫模式對它進行加鎖的執行緒都將被阻塞;

當讀寫鎖是在讀模式加鎖狀態時,如果有其他執行緒試圖以寫模式加鎖,讀寫鎖通常會阻塞隨後的讀模式鎖請求,避免讀模式鎖長期占用,而寫模式所長期阻塞;

讀寫鎖適用於對資料讀的次數比寫的次數多的情況。

api介面:

初始化和銷毀:

int pthread_rwlock_init();

int pthread rwlock_destroy();

讀加鎖、寫加鎖、解鎖:

pthread_rwlock_rdlock();

pthread_rwlock_wrlock();

pthread_rwlock_unlock();

非阻塞獲得讀鎖和寫鎖:

pthread_rwlock_tryrdlock();

pthread_rwlock_trywrlock();

linux c c 知識點整理 一

在c 中,申請動態記憶體是使用new和delete,這兩個關鍵字實際上是運算子,並不是函式。而在c中,申請動態記憶體則是使用malloc和free,這兩個函式是c的標準庫函式,使用它們必須包含stdlib.h,才能編譯通過。new delete和malloc free的相同之處在於,new和mall...

linux c c 知識點整理 三

過載即為函式過載,過載的特徵 1 相同的範圍,也就是在同乙個類中 2 函式名字相同 3 引數不同 4 virtual關鍵字無影響 覆蓋是指派生類函式覆蓋基類函式,覆蓋的特徵 1 不同的範圍,即函式分別位於派生類和基類 2 函式名字相同 3 引數相同 4 基類函式必須有virtual關鍵字 隱藏是指派...

C C 知識點整理四

斷言,是巨集,而非函式。assert 巨集的原型定義在 c c 中,其作用是如果它的條件返回錯誤,則終止程式執行。可以通過定義ndebug來關閉 assert,但是需要在源 的開頭,include之前。使用assert的缺點是,頻繁的呼叫會極大的影響程式的效能,增加額外的開銷。在函式開始處檢驗傳入引...