Создание массива массивов int в C? - PullRequest
5 голосов
/ 09 марта 2011

Допустим, у меня есть прототип следующего метода:

void mix_audio(int *vocal_data_array, int *instrumental_data_array, int *mixed_audio_array, FOURTH ARGUMENT)
{


}

Как бы я:

  1. Инициализировать array_of_arrays перед приведенным выше аргументом, чтобы передать его в качестве четвертого аргумента?

  2. В этом методе сделайте так, чтобы первым значением моего array_of_arrays был массив с именем vocal_data, чтобы вторым значением моего массива было instrumental_data_array, а третьим значением - mixed_audio_array.

  3. Как бы я потом потом перебрал все значения первого массива в array_of_arrays.

Надеюсь, я здесь не слишком много спрашиваю. Я просто думал, что это будет простой синтаксис, который кто-то мог бы выплюнуть довольно быстро:)

Спасибо!


РЕДАКТИРОВАТЬ 1

Обратите внимание, что, хотя я показал на своем примере массив array_of_arrays длиной 3, я на самом деле стремлюсь создать что-то, что может содержать переменную длину массивов.

Ответы [ 3 ]

8 голосов
/ 09 марта 2011

Простой массив массивов и функция, показывающая, как его передать.Я просто добавил ложные значения в массивы, чтобы показать, что что-то было передано функции и что я могу распечатать это обратно.Размер массива 3 является произвольным и может быть изменен на любой другой размер.Каждый массив может иметь различный размер (известный как зубчатый массив).Он показывает три ваших критерия:

Инициализация, Присвоение значений каждому индексу arrayOfArrays, Функция демонстрирует, как извлечь данные из массива массивов

#include <stdio.h>

void mix_audio(int *arr[3]);

int main() {
  int *arrayOfArrays[3];

  int vocal[3] = {1,2,3};
  int instrumental[3] = {4,5,6};
  int mixed_audio[3] = {7,8,9};

  arrayOfArrays[0] = vocal;
  arrayOfArrays[1] = instrumental;
  arrayOfArrays[2] = mixed_audio;

  mix_audio(arrayOfArrays);

  return(0);
}

void mix_audio(int *arr[3]) {
  int i;
  int *vocal = arr[0];
  int *instrumental = arr[1];
  int *mixed_audio = arr[2];

  for (i=0; i<3; i++) {
    printf("vocal        = %d\n", vocal[i]);
  }
  for (i=0; i<3; i++) {
    printf("instrumental = %d\n", instrumental[i]);
  }
  for (i=0; i<3; i++) {
    printf("mixed_audio  = %d\n", mixed_audio[i]);
  }
}
2 голосов
/ 09 марта 2011

По вашему вопросу это звучит так, как будто вы действительно хотите struct, содержащий ваши массивы, что-то вроде:

struct AudioData {

    int* vocal_data_array;
    unsigned int vocal_data_length;

    int* instrumental_data_array;
    unsigned int instrumental_data_length;

    int* mixed_audio_array;
    unsigned int mixed_audio_length;
};
1 голос
/ 09 марта 2011

Для выделения массива на примере массива целых чисел:

int** x = malloc (sizeof (int*) * rows);
if (! x) {
    // Error
}

for (int i = 0; i < rows; ++i) {
    x[i] = malloc (sizeof (int) * columns);
    if (! x[i]) {
        // Error
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...