2011-03-09 100 views
2

让我们说我有以下方法原型:在C中创建一个int数组的数组?

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

请注意,虽然我已经通过我的例子显示长度3的array_of_arrays实际上,我希望创建的东西,可能包含数组的可变长度。

+1

岂不是冗余具有用于所有参数3个单数组和第四个数组,其中包含前3个? – hennes 2011-03-09 09:53:32

回答

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

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