2014-01-06 59 views
2
#include<stdio.h> 
#define TOTAL_NO (sizeof(array)/sizeof(array[0])) 
int array[]={23,34,12,17,204,99,16}; 

int main() 
{   


int d; 
for(d=-1; d<=(TOTAL_NO-2); d++) 
printf("%d\n",array[d+1]); 

return 0; 

} 

爲什麼這個程序不顯示數組的內容? 錯誤在哪裏?我對這個C程序沒有得到期望的輸出

+0

爲什麼不'爲(d = 0; d Kninnug

+1

sizeof(int)返回未定義的int。或size_t結構,其中包含一個uint32_t。 – tesseract

回答

2

TOTAL_NO返回值爲size_t的值。這是無符號的,所以在循環退出條件下,d被轉換爲無符號,用於測試d<=(TOTAL_NO-2)

假設32位整數,這使得初始測試

0xffffffff <= 7 

這顯然失敗,防止循環運行。

循環運行作爲你,如果你改變這

for(d=-1; d<=(int)(TOTAL_NO-2); d++) 

你的循環更改爲更爲正常的形式

for(d=0; d<TOTAL_NO; d++) 

將工作太期待。這是優選的,因爲它會導致更清晰,更易於維護的代碼

+0

是的,現在它的工作正常,我忘了sizeof產生一個無符號的整數值。謝謝。 – user2728397

1

使用宏是越多越好

#include<stdio.h> 
#define TOTAL_NO(X) (sizeof(X)/sizeof(X[0])) 


int array[10]={23,34,12,17,204,99,16}; 

int main() 
{   


int d; 
for(d = -1; d <= (int)TOTAL_NO(array); d++) { 
printf(" %d\n",array[d+1]); 

} 
return 0; 

} 
1

你應該知道的sizeof返回類型爲size_t,d是int類型,當你把它們放在一起,類型d將成爲無符號的,和d將變成大number.like以下代碼:

int a=-1; 
unsigned b=1; 
if(b>a) 
    //something will never run 
相關問題