C 小知識更新

2021-07-29 23:01:47 字數 2525 閱讀 2708

1,結構體的使用不同於c語言,如

struct edge;
其中edge可以直接用來宣告結構體型別的物件,此外

struct edgeedge1,edge2,edges[10];
可以直接在結構體定義時宣告物件

2 引用與指標:引用相當於別名,只針對於乙個物件空間,不能被改變,指標是自由的,能被改變。

在c/c++中,不管是全域性變數還是區域性變數,直接做實參時,只能傳值,不能被改變,如果想在函式中改變變數的值,可以對變數進行引用(然而c語言中沒有引用,所以c語言一般靠函式返回值去改變變數)

3 動態陣列:c++中動態申請陣列不需要用malloc,語法麻煩而且還要匯入mallo.h包,可以直接用new去申請,如

int *a=new

int[n];

注意:memset只能初始化連續的空間,而用new分配的空間並不一定連續,所以不能直接sizeof(a),而要用n*sizeof(int)

4 二維陣列與函式:因為編譯原因,c++的二維陣列做函式形參必須要指定第二維的大小,此外,函式不能返回陣列,只能返回指標或者引用。

建議對於二維陣列,最好封裝為結構體或者類,做引數或者返回值。

5 new與二維陣列:常用的兩種new建立二位陣列物件的方法:

1. 建立乙個指標陣列

int (*p)[10]=new int[5][10]();
注意new後面帶有「()」表示初始化,預設為0

2. 建立乙個指向指標陣列頭部的指標

int **p=new

int*[5];

int i;

for(i=0;i<5;i++)p[i]=new

int[10]();

1,cstring庫在使用memset函式時必須匯入

2,algorithm庫

sort(void *a,void *a+n[,cmp]):對陣列從a位置到a+n位置進行排序,其中第三個引數cmp大小比較函式可選,可以返回bool值或者int值。sort函式不支援對二維陣列排序,可以考慮結構體陣列。

swap(int a,int b) : 因為algorithm自帶的函式已經處理,引數在這裡無需加引用

3,string.h庫

char *strncpy(char *dest, const char *src, int n),把src所指向的字串中以src位址開始的前n個位元組複製到dest所指的陣列中,並返回des;

而strcpy(char * dest, char *src)是以』\0』位終止,如果空間不夠,會overflow

1,堆疊與變數:區域性變數申請在棧空間,一般在2m左右,所以對於int陣列,最大長度只能在520000左右。全域性變數申請在堆空間,最大可以占用整個記憶體(一般也不會),所以空間申請較為靈活。

2,memset與全域性變數:不要用memset對malloc或者new的全域性變數進行初始化(除了全域性陣列外),可能涉及到記憶體未提前分配的問題。

3,指標作為形參:指標能做形參的原因是指標儲存一段實際的物理記憶體,這是客觀存在的,哪怕函式空間對形參重新分配記憶體,但是該記憶體所儲存的物理記憶體位址依然不變,後續進行增減都是直接在指標所對應的物理記憶體上操作,所以能產生影響。如:

int

*p;void add(int

*p)

但是不能再函式中直接對指標進行賦值,如

int

*p,*q;

void change(int

*p)

函式執行完成之後,p指標依然沒有變化,因為該函式不是對p指標所指向的物理記憶體操作,而是對指標本身的值(也就是位址操作),而指標本身的值是有函式外的作用域儲存的,函式內的儲存並不會影響函式外的作用域儲存。

4,空指標的記憶體分配:廢話,空指標當然是沒有記憶體分配的,只是在編譯時候的乙個宣告,執行時程式並不產生任何影響,比如:

int

*p;int

*b=p

int a=3;

b=&a;

此時對於指標p並不產生任何影響,因為指標p只是乙個概念,並沒有物理記憶體,所以空指標絕對不能作為函式形參

1 取模和取餘:x除以y(x/y),取模(程式設計沒有取模函式,對於負數可以再加上y)的餘數與y符號相同,取餘x%y的餘數與x相同。

2 逗號運算子: 用來連線表示式,優先順序最低

PYTHON常用小知識(持續更新)

python判斷檔案和資料夾是否存在 import os os.path.isfile test.txt 如果不存在就返回false os.path.exists directory 如果目錄不存在就返回false python時間的處理 from time import 將time引入進來 fti...

openlayers學習小知識 持續更新

1 限制地圖縮放級別 在view中定義屬性minzoom和maxzoom,可以設定地圖縮放的最小級別和最大級別 2 動態設定地圖的縮放級別 使用map.getview 方法獲取地圖當前的view,view.getzoom獲取當前檢視的縮放級別,view.setzoom設定檢視的縮放級別,map.se...

備用小知識 不斷更新

1.延時函式 nsthread sleepfortimeinterval 3 self performselector selector machineballaction withobject nil afterdelay 0 你一定要在dealloc方法中release這個array,顯然易見,...