在C中创建一个int数组数组?

时间:2011-03-09 09:39:39

标签: c arrays multidimensional-array

让我们说我有以下方法原型:

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中第一个数组的所有值。

  4. 我希望我在这里不要求太多。我只是觉得有人可以很快吐出简单的语法:)

    谢谢!


    编辑1

    请注意,虽然我已经通过我的示例展示了一个长度为3的array_of_arrays,但我实际上正在寻找可以包含可变长度数组的东西。

3 个答案:

答案 0 :(得分:7)

简单的数组数组和显示如何传递它的函数。我刚刚在数组中添加了假值,以显示某些内容已传递给该函数,并且我可以将其打印出来。数组的大小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]);
  }
}

答案 1 :(得分:2)

从您的问题来看,您实际上想要一个包含数组的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;
};

答案 2 :(得分:1)

对于使用整数数组示例的数组分配:

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
    }
}