通常來說獲取數組的長度時不要對指針應用sizeof操作符。
現來看看下面這段代碼:
void clear(int array[]) { for(size_t i = 0; i < sizeof(array) / sizeof(array[0]); i++) { array[i] = 0; }}void dowork(void) { int dis[12]; clear(dis); /*...*/}
clear()使用sizeof(array) / sizeof(array[0])這種用法確定這個數組的元素數量,但由于array是一個形參,因此它是指針類型,sizeof(array) = sizeof(int *) = 4 (32位OS)
當sizeof操作符應用于聲明為數組或函數類型的形參時,它會產生經過調整的(指針)類型的長度
對此問題的解決方案如下:
void clear(int array[], size_t len) { for(size_t i = 0; i < len; i++) { array[i] = 0; }}void dowork(void) { int dis[12]; clear(dis, sizeof(dis) / sizeof(dis[0])); /*...*/}
|
新聞熱點
疑難解答
圖片精選