C 中的各種小細節 三

2021-12-29 23:44:00 字數 1510 閱讀 5262

一、建立陣列的兩種形式

形式一:

#define n 10

int a[n];

int n = 10;

int b[n];//編譯報錯

注意這種定義陣列的形式有很多缺點,例如:1:陣列的長度必須是在編譯時就知道的,即陣列的長度不能改變,

在定義陣列指定陣列的長度值必須為乙個常量值,2:陣列只在定義它的語句塊記憶體在,因為這種形式屬於是編譯器

自動在棧記憶體為陣列分配空間。

形式二:

int n = 10;

int *c = new int[n]();//編譯成功通過

動態分配陣列時,可以用乙個變數指定陣列的長度,即程式可以在執行時動態的去判斷陣列的實際長度,而且

陣列的記憶體空間是在堆記憶體中,陣列的記憶體資料存在時間受程式設計師自己控制。

注意:在形式二中,1:即使當程式執行時得出陣列的長度為0,程式也不會出錯,因為呼叫new動態建立長度為0的

陣列也是合法的。2:在程式的結尾程式也一定要顯示的自己去釋放陣列的動態空間。

十二、c++string型別和c風格字串**的相互相容

1:c風格字串轉換成string型別物件

int a[1];

int * b = new int[0]();

string str("asd");//直接構造乙個string新物件

string ss = (string)("asd");//使用強制型別轉換成string物件

cout<

2:string型別物件轉換成c風格字串

直接呼叫string型別成員函式.c_str()即可

const char * s = str.c_str();

while (*s)

{ cout<

十三、用typedef簡化多位陣列的指標

在c++中當要定義指向陣列的指標時,乙個很靈活的方法就是用typedef型別定義,這將會

使該指向陣列的指標更加的易讀、易寫和方便理解。

for examp:

typedef int int_array[4];//宣告int_array是乙個有4個int型別元素的陣列型別

int_array a;//a是乙個有4個int型別元素的陣列型別,即a為int * 型別物件

//測試a

a[0] = 1;

a[1] = 2;

a[2] = 3;

a[3] = 4;

int * p1 = a ;

//int * * p2 = a;//錯誤原因:「不能將int* 型別賦值給int**型別」

for(int i = 0;i<4;i++)

{ cout<

十四、按位操作中的左移、右移

注意:使用左移操作符時,將會在左邊插入0以補充空位,而對於右移操作符時,

如果其運算元是無符號數,則從右邊開始插入0,如果是有符號數,則插如符號位的副本或者0值。

十五、賦值操作符的右結合性

賦值操作符是從右往左結合的,且其返回值是左值。

C語言小細節(三)

第一種 int a int p a 在初始化時另p指向int a的 p 1 第二種 int a int p 先定義乙個指標p p a 再另其指向a p 1 int arr 6 int pa arr 初始化指標pa指向陣列arr 6 的第乙個元素 int pb 初始化指標pb pb arr 令其指向a...

小細節 關於C 各種變數的size問題。

c 中整形資料型別的範圍都定義在了limits.h中,具體場景中可以從這個檔案獲取編譯器具體實現方式。iso並沒有規定大部分資料型別的長度,僅僅規定了sizeof char 1,但位長卻是char bit定義的。32位機器中,int,long,指標都是32 bit。在unix 64位機器中,int是...

C 程式設計小細節

本文寫給自己看看,記錄一些程式設計中的小細節!1.if 0 a 當我們判斷變數與一常量是否相等時,最好把常量 0 放前面,而不是寫成if a 0 因為如果我們手誤,當判斷語句 寫成了 那麼if 0 a 會直接報錯,方便我們發現錯誤,而if a 0 不會。常見情況還有比如 if nullptr p 2...