2011-03-09 107 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]); 
    } 
}