C 之安全使用陣列的4中方法

2021-07-05 11:15:08 字數 954 閱讀 8184

陣列有兩個特質:

1. 不能複製(有些編譯器將陣列複製作為編譯器擴充套件)

2. 使用陣列名時,自動將其轉為為指向陣列第乙個元素的指標(隱式型別轉換)

上面兩個特徵決定了處理陣列的函式通常通過指向陣列元素的指標來處理陣列內容

一下幾個陣列形參定義是等價的:

1.  void ****(int *p);

2.   void ****(int p);

3.  void ****(int p[10]);

c++不會檢查陣列形參的長度。。。。

這種情況下, 要安全的使用陣列(不出現訪問越界),有以下幾種方式:

1.    在陣列中人為增加結束標識,  類似c風格字串以\0 為結束標識;

2.     仿照c++標準庫做法,  使用兩個指標,乙個指向最初始元素,乙個指向最末元素的下乙個元素;

3.     顯示的傳入陣列長度這個引數

下面**實現陣列求和的功能, 分別使用了上面3中方法:

#include

#include

#include

using namespace std;

// the arry is end of \0 , like const char arry

int arry_sum1(int *p)

return sum;

}int arry_sum2(int *p, size_t len)

return sum;

}int arry_sum3(int *pbegin, int * pend)

int main(int argc, char* argv)

;cout《另一種安全的方式是通過引用來使用陣列

void ****(int (&a)[10]);

當使用引用形參時,傳遞的是陣列物件本身,此時編譯器的型別檢查會檢查引數型別以及陣列長度, 而不會忽略引數中的陣列長度, 因而是安全的

C 中方法中 ref 和 out的使用

案例1 static void main intnumlargerthan10,numlargerthan100,numlargerthan1000 proc ary,out numlargerthan10,out numlargerthan100,out numlargerthan1000 con...

實現氣泡排序的4中方法

逐層通過無序區中的相鄰元素間關鍵字的比較和位置的交換,使最小的元素往上冒泡 第1種private static void bundlesort1 for int i 0 i arr.length 1 i system.out.println arrays.tostring arr 第2種privat...

CSS清除浮動的4中方法

清除浮動 這個問題,做前端的應該再熟悉不過了,咱是個新人,所以還是記個筆記,做個積累,努力學習向大神靠近。css清除浮動 的方法網上一搜,大概有n多種,用過幾種,說下個人感受。1 結尾處加空div標籤 clear both1 2 3 4 div1 left right clear 這種方法,感覺之前...