在訪問陣列時,可能會造成陣列越界訪問,所以乙個良好的程式設計習慣是很重要的,主要有以下兩個注意點:
1、陣列不是作為函式引數訪問時,直接檢查陣列元素的個數
例如:#include
using namespace std;
int main()
;for(int i=0;i
cout
}輸出結果如下:可以看出陣列占用40個位元組。這種訪問方式每次對a[i]賦值時,首先檢查下標i是否越界,然後再去對該陣列元素進行訪問。
2、如果訪問的陣列作為函式的引數傳遞時,應多加乙個引數存放陣列長度;陣列作為函式引數傳遞時,陣列的特性發生改變。
如:#include
using namespace std;
int fun(int a[10])
int main()
;cout<
cout<
}**執行結果如下:
從上面執行結果可以發現:當陣列a作為函式引數時所佔的記憶體空間變成了4個位元組,是否很疑惑? 這是函式具有的特性,函式的引數傳到函式的棧空間時,如果引數是陣列,函式只是把陣列名所表示的位址複製到棧空間,而並沒有將陣列的內容全部拷貝到棧空間,此時的陣列已經完全變成了乙個指標,即在棧空間只是存放位址,所以只佔了4 個位元組。
所以,在函式中使用sizeof(a)得到的值一直為4;
若要判斷陣列訪問是否越界,可以傳遞兩個實參:乙個是陣列名,另乙個為陣列長度。**如下:
#include
using namespace std;
int fun(int a[10],int n)
return 0;
}int main()
;cout<
fun(a,sizeof(a)/sizeof(int));
cout<
}每天進步一點點。。。。。。
陣列的訪問
通過索引訪問陣列中的元素 1 取出陣列中的元素 2 修改陣列中的元素 3 往陣列中儲存元素 格式 陣列名 陣列索引 索引 每乙個儲存到陣列的元素,都會自動的擁有乙個編號,從0開始,這個自動編號稱為陣列索引 index 注意 1.直接列印陣列名,列印的是陣列的位址值 2.索引是從0開始,一直到 陣列長...
oracle sql查詢時需注意的細節
1 oracle 對date型資料做判斷時,null值的判斷 oracle 對date型資料做判斷時,null值的判斷,需注意 select tp.display,tp.status,tp.isrobticket,tp.robtickettime,tp.productid from t produc...
陣列splice細節問題
今天使用 splice又遇到乙個沒注意到的小坑。先看下它的定義與用法 splice 方法向 從陣列中新增 刪除專案,然後返回被刪除的專案。注釋 該方法會改變原始陣列。arrayobject.splice index,howmany,item1,itemx 引數 描述index 必需。整數,規定新增 ...