十
一、建立陣列的兩種形式
形式一:
#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...