2017-09-25 33 views
0

我有两个int类型的阵列。每个元素大约有17901个元素。一个代表高度,另一个代表空速。我想分割两个阵列(这个分区将导致马赫数)。我将如何做到这一点?C:两个阵列的分区

这是我使用的时刻代码:

for (i = 0; i < ((size/2) + 1); i++) { // size/2 here is 17901 
    machNumber[i] = (ASarray[i]/soundspeed[i]); 
} 
+6

这有什么代码问题? –

+0

@AlexandreFenyo我认为这个表达式(size/2)+1是无效的。:)应该是(size + 1)/ 2吗? –

+0

1.如果'machNumber'是一个浮点数组,但是ASarray和soundspeed都是整数数组,那么这个代码会执行截断的整数加法,这可能不是您想要的。 2.您应该运行I = 0,I

回答

1

通过计算尺寸sizeof(ASarray)/sizeof(*ASarray)

这种方式取代((size/2)+1,不会有关于循环疑问。当然,ASarray的大小必须是静态定义的(内存不能与malloc一起分配)。

for(i = 0; i < sizeof(ASarray)/sizeof(*ASarray); i++) { 
    machNumber[i] = (ASarray[i]/soundspeed[i]); 
} 
+1

没有看到“ASarray”的声明,你不能确定它是否真的被声明为一个*数组*(而不是一个单纯的指针)。你的'sizeof'技巧不适用于指针。 – AnT

+1

是的,你是对的,这就是为什么我写*内存不能分配malloc *。但由于尺寸已知(17901个元素),因此可能会静态分配。 –

+0

我知道你知道你在做什么,但是当你说“当然,这个大小必须是静态定义的”时,你假设其他人都明白这一点,但这显然是*不*真;许多初学程序员不理解这一点,并犯这个错误。 –

0

将大小调整并不能正确计算元素的数量:您应该改为将数组大小除以元素大小(均以字节为单位)。此外,如果machNumber是一个浮点类型既不ASarray也不soundspeed是,你需要一个投来计算正确的马赫值:

for (size_t i = 0; i < sizeof(ASarray)/sizeof(ASarray[i]); i++) { 
    machNumber[i] = (double)ASarray[i]/soundspeed[i]; 
}