2014-07-22 33 views
0

我想使用for循环为C(我使用minGW)中的数组赋值。起初,我试着做:For循环分配溢出到另一个变量

double flag[5] = {0.1}; 

但只是指定数组中的第一个变量为0.1。然后我试着做一个for循环来分别分配每一个。我不想硬编码的原因是因为我希望标记变量的大小对用户的输入是灵活的。我当前的代码如下所示:

int cnt; 
    double flag[5]; 
    for (cnt = 0; cnt < sizeof(flag); cnt++) { 
     printf("sizeof(flag) is %d\n",sizeof(flag)); 
     printf("size is equal to %d and cnt is %d\n",size,cnt); 
     flag[cnt] = 0.1; 
    } 
    printf("size is equal to %d\n",size); 

变量"size"从6变化先前被确定为垃圾号码,我不能修改迭代次数。例如,如果我设置了cnt < sizeof(flag)-1,则没有变化。 -2,-5,等没有变化。但是,如果我大幅度缩小尺寸,它会陷入无限循环。 sizeof(flag)是40,而不是像我想要的那样,但是除以8也会以某种方式进入无限循环。有什么建议?

这个问题得到解答,谢谢大家!

+5

再次阅读'sizeof'做什么。 – chris

+0

编辑的代码在这里工作正常。你的代码的输出是什么? –

回答

3

变化:

for (cnt = 0; cnt < sizeof(flag); cnt++) 

for (cnt = 0; cnt < sizeof(flag)/sizeof(double); cnt++) 
4

flag数组的元素的数量是不:

sizeof (flag) 

sizeof flag/sizeof *flag 

前者是在该阵列的字节大小,后者是在该阵列的字节大小除以数组中一个元素的字节大小。

1

使用

for (cnt = 0; cnt < sizeof flag/sizeof *flag; cnt++) 
{ 

} 
1

sizeof()返回该变量是5*sizeof(double)所需要的字节#。所以你的循环运行超过5次会导致溢出。

除了在先前的答案中提出的解决方案之外,您可以拥有一个用于数组大小的宏,并使用此宏并运行循环直到该值。

#define SIZE 5 
. 
. 
. 
int cnt; 
double flag[SIZE]; 
for (cnt = 0; cnt < SIZE; cnt++) { 
     printf("sizeof(flag) is %d\n",sizeof(flag)); 
     printf("size is equal to %d and cnt is %d\n",size,cnt); 
     flag[cnt] = 0.1; 
} 
printf("size is equal to %d\n",size);