Skaarj писал(а): ↑08.10.2009 20:21
Есть код на Си
... skipped ...
На выходе должен печатать, то что должен печатать закоментированный код, но печатает нули.
Поясните, пожалуйста, в чём ошибка.
Здесь очень много ошибок и странного кода

1. Вы возвращаете значение нулевого элемента массива
2. Массивы нельзя вернуть, можно вернуть указатель на начало
3. Нельзя возвращать указатель на локальные переменные - эти данные будут уничтожены и, возможно, переписаны
4. Использовать глобальную переменную для циклов - сверхзло
5. Странный код - а те 2 if разве нельзя заменить одним с веткой else?
6. Внутри функции неизвестен размер массивов, поэтому лучше передавать размер массива(ов) в функцию.
Можно делать так, как показал
MrSinister, а можно так:
Код: Выделить всё
#include <stdio.h>
float ar1[3] = {0.0, 0.1, 0.2};
float ar2[3] = {0.3, 0.4, 0.5};
float ar3[6];
#define LENGTH( array ) ( sizeof( array ) / sizeof( array[0] ) )
bool merge( float dst[], int dst_size, const float vec1[], int size1, const float vec2[], int size2 ) {
if( dst_size < size1 + size2 || size1 < 0 || size2 < 0 )
return false;
for( int i = 0; i < size1; i++ )
dst[ i ] = vec1[ i ];
for( int i = 0; i < size2; i++ )
dst[ size1 + i ] = vec2[ i ];
return true;
}
int main(void){
merge( ar3, LENGTH( ar3 ), ar1, LENGTH( ar1 ), ar2, LENGTH( ar2 ) );
for( int i = 0; i < LENGTH( ar3 ); i++){
printf("%d %f\n", i, ar3[i]);
}
}