Я изучаю язык программирования C из книги «C Primer Plus». Я решаю упражнение, и я ударяю о стену:Скопируйте 2d-массив в другой
Напишите программу, которая инициализирует двумерную матрицу размером 3 × 5 и использует функцию на основе VLA, чтобы скопировать ее на второй, мерный массив. Также предоставляйте функцию на основе VLA для отображения содержимого двух массивов. Эти две функции должны быть способны, в общем, обрабатывать произвольные массивы N × M. (Если у вас нет доступа к компилятору, совместимому с VLA, используйте традиционный подход C для функций, которые могут обрабатывать массив N × 5).
Я не могу использовать VLA, поскольку мой компилятор не поддерживает его, я использую VC2013. Вот мой код:
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#define LIM1 10
#define LIM2 10
#define LIM3 2
int ct, ct2, size;
void copy_arr(double *[LIM3], double *[LIM3], int size, int lim);
int main(void)
{
double arr1[LIM1][LIM2], arr2[LIM1][LIM2];
printf("Enter the size of the array\n");
scanf("%d", &size);
printf("Enter the array elements\n");
for (ct = 0; ct < size; ct++)
{
for (ct2 = 0; ct2 < LIM3; ct2++)
{
scanf("%lf", &arr1[ct][ct2]);
}
}
printf("\n");
for (ct = 0; ct < size; ct++)
{
for (ct2 = 0; ct2 < LIM3; ct2++)
{
printf("%.2f ", arr1[ct][ct2]);
}
printf("\n");
}
printf("\n");
copy_arr(arr1, arr2, size, LIM3);
for (ct = 0; ct < size; ++ct)
{
for (ct2 = 0; ct2 < LIM3; ++ct2);
{
arr2[ct][ct2] = arr1[ct][ct2];
printf("%.2f ", arr2[ct][ct2]);
}
printf("\n");
}
printf("\n");
system("pause");
}
void copy_arr(double (*arr1)[LIM3], double (*arr2)[LIM3], int size, int lim)
{
for (ct = 0; ct < size; ct++)
{
for (ct2 = 0; ct2 < lim; ct2++)
{
arr2[ct][ct2] = arr1[ct][ct2];
}
}
return;
}
выход: http://postimg.org/image/mnswuyy2b/
Я не могу понять, как передать значение переменного размера функции copy_arr
. Есть ли другие способы, кроме VLA?
Вы определили 2D массив как 'arr1 [LIM1] [LIM2], arr2 [LIM1] [LIM2]', но в цикле вы используете 'LIM3', как предел второго измерения. Какой вы хотите?? – Arpit
Пожалуйста, не включайте литеральный выходной текст в качестве изображения (и если вы * должны *, по крайней мере, используйте поставщика, который не будет спамить различные всплывающие окна). Просто скопируйте и вставьте вывод в свой пост. – usr2564301