我有两个int
类型的阵列。每个元素大约有17901个元素。一个代表高度,另一个代表空速。我想分割两个阵列(这个分区将导致马赫数)。我将如何做到这一点?C:两个阵列的分区
这是我使用的时刻代码:
for (i = 0; i < ((size/2) + 1); i++) { // size/2 here is 17901
machNumber[i] = (ASarray[i]/soundspeed[i]);
}
我有两个int
类型的阵列。每个元素大约有17901个元素。一个代表高度,另一个代表空速。我想分割两个阵列(这个分区将导致马赫数)。我将如何做到这一点?C:两个阵列的分区
这是我使用的时刻代码:
for (i = 0; i < ((size/2) + 1); i++) { // size/2 here is 17901
machNumber[i] = (ASarray[i]/soundspeed[i]);
}
通过计算尺寸sizeof(ASarray)/sizeof(*ASarray)
这种方式取代((size/2)+1
,不会有关于循环疑问。当然,ASarray的大小必须是静态定义的(内存不能与malloc一起分配)。
for(i = 0; i < sizeof(ASarray)/sizeof(*ASarray); i++) {
machNumber[i] = (ASarray[i]/soundspeed[i]);
}
没有看到“ASarray”的声明,你不能确定它是否真的被声明为一个*数组*(而不是一个单纯的指针)。你的'sizeof'技巧不适用于指针。 – AnT
是的,你是对的,这就是为什么我写*内存不能分配malloc *。但由于尺寸已知(17901个元素),因此可能会静态分配。 –
我知道你知道你在做什么,但是当你说“当然,这个大小必须是静态定义的”时,你假设其他人都明白这一点,但这显然是*不*真;许多初学程序员不理解这一点,并犯这个错误。 –
将大小调整并不能正确计算元素的数量:您应该改为将数组大小除以元素大小(均以字节为单位)。此外,如果machNumber
是一个浮点类型既不ASarray
也不soundspeed
是,你需要一个投来计算正确的马赫值:
for (size_t i = 0; i < sizeof(ASarray)/sizeof(ASarray[i]); i++) {
machNumber[i] = (double)ASarray[i]/soundspeed[i];
}
这有什么代码问题? –
@AlexandreFenyo我认为这个表达式(size/2)+1是无效的。:)应该是(size + 1)/ 2吗? –
1.如果'machNumber'是一个浮点数组,但是ASarray和soundspeed都是整数数组,那么这个代码会执行截断的整数加法,这可能不是您想要的。 2.您应该运行I = 0,I