Q1int arr[10] 的合法索引範圍是?概念
0 ~ 9。大小 10 → 索引 0 到 9,arr[10] 越界。
Q2int a[4]={1,2,3,4}; a[0]=a[3]; a[3]=a[0]+a[1]; 後 a[0] a[1] a[2] a[3]?預測輸出
4 2 3 6。先 a[0]=a[3]=4;再 a[3]=a[0]+a[1]=4+2=6(a[0] 已是 4)。
Q3int a[100]; 沒有初始化,內容是什麼?概念
垃圾值。未初始化的區域陣列內容不確定。需要時用 int a[100]={0} 全補 0。
Q4int cnt[5]={0}; int a[8]={2,0,2,3,1,2,4,0}; for(i=0;i<8;i++) cnt[a[i]]++; 之後 cnt[2]?預測輸出
3。2 出現在 a[0]、a[2]、a[5] 共 3 次。整個 cnt={2,1,3,1,1}。
Q5遍歷大小為 n 的陣列卻寫 for(i=0;i<=n;i++),會發生什麼?抓 bug
越界。i 跑到 n、存取 a[n](最後合法是 a[n-1])。遍歷一律 i < n。
Q6把陣列傳給函式,函式裡 arr[0]=99,原本的陣列會?概念
會被改到。陣列名退化成位址、傳址非複製,所以函式內改動會改到原陣列。
Q7為什麼陣列傳給函式時,通常要另外傳一個 n(大小)?概念
sizeof 在函式內失效。陣列退化成位址後 sizeof(arr) 等於指標大小,算不出元素個數,所以要另傳 n。
Q8二分搜尋(binary search)能正確運作的前提是?概念
已排序。二分搜尋靠「砍一半」,前提是資料有序。沒排序就先排序再搜。
Q9在宣告處 int a[5];,sizeof(a)/sizeof(a[0]) 等於?(int 為 4 bytes)預測輸出
5。sizeof(a)=20(5×4)、sizeof(a[0])=4,相除=5=元素個數。注意傳函式後此招失效。
Q10int a[5] = {0}; 的效果是?概念
全部是 0。初始化列只給一個 0,其餘自動補 0,所以整個陣列都是 0。