知識點部落格鏈結及雜記錄

2021-09-12 13:32:48 字數 3586 閱讀 3391

tcp/ip 協議:贊

子網掩碼:

子網掩碼/100207

路由:socket程式設計:

new/delete和malloc、free的用法和區別:

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

1、全域性變數存在靜態儲存區,區域性變數存在棧區,動態申請的變數存在堆區。

2、檢視乙個整數的二進位制表達中有幾個1,可用x&(x-1)。

每執行一次x = x&(x-1),會將x用二進位制表示時最右邊的乙個1變為0,因為x-1將會將該位(x用二進位制表示時最右邊的乙個1)變為0。

程式:int func(int x)

return countx;

}3、a++和++a的區別

a++是先執行,後自加1;++a是先自加1,再執行

int a=1, b=1;

printf("%d\n", a++);      #輸出1

printf("%d\n", ++b);      #輸出2

4、for迴圈執行順序

for(a; b; c)

do_sth;

符合b條件,則執行迴圈體do_sth,執行完後,返回執行c操作;再判斷c條件

解析:①初始化a=0, b=0;

②a<=1,x的非為1,符合迴圈條件

③x++後x自增為1.

④進入迴圈體,a++,a自增為1

⑤執行for迴圈中的a++操作,a自增為2

⑥a為2,a<=1不符合,所以&&後的「!x++」不執行,x還為1,不執行迴圈體

⑦所以最後,a=2,x=1

5、c中printf壓棧順序

輸出結果為:3, 3, 1

c中printf計算引數時,是從右向左壓棧的,從右向左運算,第乙個是*(ptr++),先列印*ptr=1,然後ptr++後,*ptr=2;

然後是*(++ptr),ptr++後,列印*ptr=3;

最後列印*ptr=3。

6、邏輯左移、算術左移、邏輯右移、算術右移(優先順序小於加法+)

如果運算元是無符號數即是邏輯移位,如果運算元是帶符號數,是算術移位。

邏輯左移,算術左移,邏輯右移都是普通的補0;

算術右移的最右邊需要補原符號位。

7、核心啟動流程圖

流程圖來自:

8、預編譯、編譯、彙編、鏈結

預編譯:gcc -e test_const.c -o test_const.i

編譯:gcc -s test_const.c -o test_const.s

彙編:gcc -c test_const.c -o test_const.o

預編譯主要處理帶「#」號的語句,①刪除#define,展開巨集定義;②處理條件預編譯;

③處理#include,把包含的「.h」插到對應位置;④刪除注釋//,/*  */;⑤新增行號和檔案識別符號;

⑥保留#programa編譯器命令。設定編譯器狀態,指示編譯器完成一些特定的動作。

9、malloc/free和new/delete區別

malloc/free是庫函式,new/delete是c++運算子。

10、static關鍵字作用

在函式內定義的靜態區域性變數,該變數存在於靜態儲存區,即使函式執行結束,靜態變數的值也不會被銷毀。

在函式外定義的靜態變數,他的作用域只能在定義該變數的檔案中,不能被其他檔案extern引用。

靜態函式只能在宣告它的原始檔中引用。

11、const關鍵字作用

①修飾指定的變數不能被修改

const int a = 5;/*a的值一直為5,不能被改變*/

const int b; b = 10;/*b的值被賦值為10後,不能被改變*/

int const *ptr;

const int *ptr; /*ptr為指向整型常量的指標,ptr的值可以修改,但不能修改其所指向的值*/

int *const ptr;/*ptr為指向整型的常量指標,ptr的值不能修改,但可以修改其所指向的值*/

const int *const ptr;/*ptr為指向整型常量的常量指標,ptr及其指向的值都不能修改*/

總結:若const位於*號左側,則const修飾的是指向的變數;若const位於*號右側,則const修飾的是指標不可修改;

所以int const* ptr和const int *ptr情況一樣。

②修飾函式形參,形參只能在呼叫時賦值,不能在函式體內修改。

③修飾函式返回值不能被修改。如鍵盤輸入的值const *str=getstr();

④類的有些成員函式不改變成員變數,只獲取成員變數,是「唯讀」函式,這時可把該成員函式加上const進行標識。

eg:

class point

int point::gety() const //實現時也必須一樣的方式,後面加const

唯讀函式既不能改變yval的值,也不能呼叫會改變yval的函式,只能呼叫const函式。

不能把const放在前面,那樣就返回值變成了固定的,意義不同了。

12、switch(表示式)…case語句

switch 後面括號內的「表示式」必須是整數型別。也就是說可以是 int 型變數、char 型變數,也可以直接是整數或字元常量,哪怕是負數都可以。但絕對不可以是實數,float 型變數、double 型變數、小數常量通通不行。

case語句後面若是不加break,當符合條件的case出現而後面沒跟break,後面的case語句會一直執行完才會跳出break。

13、#define巨集定義時注意加括號,否則可能會出錯

eg:#define sub(x,y) x-y           sub(3,3)*5預編譯時展開為(3-3)*5

#define sub(x,y) (x-y)         sub(3,3)*5預編譯時展開為3-3*5

#define一下一年中的秒數,

#define seconds_per_year (60*60*24*365)ul  (以防十六位的機器會整形溢位,用長整型l,無符號長整型ul)

14、內聯函式inline和巨集定義差別

內聯函式使用場景:①乙個函式被不斷重複呼叫;②函式只有簡單幾行,且不包含for,while,switch語句。

inline關鍵字要放在函式的定義實現前,而不是函式宣告前。

內聯函式inline在編譯的時候,直接嵌入到目標**中,不需要中斷呼叫跳轉。巨集只是簡單的替換。

內聯函式要做引數型別檢查,巨集不做型別檢查,所以內聯函式更安全。

內聯函式和巨集都是用增加空間消耗來換取效率的提高。

15、函式指標和指標函式

函式指標的實質是指向函式的指標;int (*pfun)(int x, inty)

指標函式的實質是乙個返回指標的函式;int *pfun(int x, int y)

知識點雜記

三 c 相關 1.qstring與qchar類 關於qchar類詳細的文章 1 qchar轉char型別 char a qchar qch a qch.tolatin1 qchar char 還有 toutf82 qstring轉qchar型別 qstring str abcde qchar b n...

前端知識點雜記

css display屬性 block css1 塊物件的預設值。將物件強制作為塊物件呈遞,為物件之後新增新行 可以定義高度和寬度 none css1 隱藏物件。與 visibility 屬性的hidden值不同,其不為被隱藏的物件保留其物理空間 inline css1 內聯物件的預設值。將物件強制...

Python 知識點雜記

輸入以空格分隔的陣列時,可使用字串的split函式按空格分隔,例如dir input split 得到了陣列dir 但是該陣列是以字串形式儲存的,所以此時,我們可以使用map函式,例 dir map int,input split 來獲得乙個int陣列。或者,如果需要使用數量已知的變數去儲存,可以直...