Я хотел бы создать функцию C, которая принимает 2D-массив удвоений в качестве параметра и работает с этим массивом посредством индексации, например. printf("%f ", array[i][j])
.Мне нужен простой пример передачи 2D-массива функции в C
То, что я был в состоянии собрать воедино из различных примеров и SO вопросы что-то вроде этого:
void printArray(double **array, int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%f ", array[i][j]);
}
printf("\n");
}
}
В main
, я в состоянии успешно напечатать массив следующим образом:
int i, j, k = 0, m = 5, n = 6;
double **a = malloc(m * sizeof(*a));
//Initialize the arrays
for (i = 0; i < m; i++)
{
a[i] = malloc(n * sizeof(*(a[i])));
}
for (i = 0; i < m; i++)
{
for (j = 0; j<n; j++)
{
k++;
a[i][j] = k;
}
}
printArray(a, m, n);
Однако, когда я пытаюсь инициализировать массив в некоторых заданных значений, а затем вызвать:
double a[5][6] = { { 1, 2, 3, 4, 5 ,6},
{ 1, 2, 3, 4, 5, 6},
{ 1, 2, 3, 4, 5, 6},
{ 1, 2, 3, 4, 5, 6},
{ 1, 2, 3, 4, 5, 6} };
printArray(a, 5, 6);
Я встретился со следующей ошибкой:
Unhandled exception at 0x011514D3 in Example.exe: 0xC0000005:
Access violation reading location 0xA1F8E3AC.
Может кто-то объяснить, что моя ошибка и как ее исправить?
Обратите внимание, что в целях определения функции я буду знать размер массива во время выполнения, но не время компиляции. Кроме того, я собираюсь на Windows с VisualStudio 2013.
Ваша функция, кажется, принимает двойной указатель, не передаете ли вы массив по значению? Попробуйте «& a» – Jay
Если вы хотите, чтобы самый простой пример от другого пользователя на SO использовал: http://stackoverflow.com/questions/3911400/passing-2d-arrays. – KillaBytes
@JohnColeman В printarray (a, 5, 6): 5,6 - это размер массива, а не элемент. Разве я не понял, что вы имели в виду? – ilent2