2014-05-02 40 views
0

我有一個arrFillRandom函數,它用隨機數填充數組並打印出來。那就是:不能指向或存儲陣列的元素在一個新的陣列

void arrFillRandom(int *arrayPtr, int sizeRow, int sizeColumn, int randomRange) { 
    int i, j; 

    arrayPtr = malloc(sizeof(int) * sizeRow * sizeColumn); 

    for (i = 0; i < sizeRow; i++) 
     for (j = 0; j < sizeColumn; j++) 
      (arrayPtr + i)[j] = (rand() % randomRange); 

    for (i = 0; i < sizeRow; i++) { 
     printf("\n"); 
     for (j = 0; j < sizeColumn; j++) 
      printf("%d\t", (arrayPtr + i)[j]); 
    } 
} 

這裏是我的main

int main() { 
void arrFillRandom(int *arrayPtr, int sizeRow, int sizeColumn, int randomRange); 

int matrix1[2][3]; 
int matrix2[3][2]; 

int *ptr1, *ptr2; 
ptr1 = &matrix1[0][0]; 
ptr2 = &matrix2[0][0]; 

arrFillRandom(ptr1, 2, 3, 10); 
arrFillRandom(ptr2, 3, 2, 10); 

printf("\n%d", ptr1[0]); 

return 0; 
} 

我的問題是ptr1ptr2不指向數組,arrFillRandom之前填補。 在arrFillRandom函數中,我用隨機數打印出矩陣。例如:

1,0,9 //第一行第一矩陣

0,9的,4 //第一矩陣

8的第二行中,2 //第一矩陣的第一行

2,5 //第二矩陣的第二行

5,5 //第二矩陣的第三行

但在main,當我想要打印該矩陣的第一個元素:

printf("\n%d", ptr1[0]); 

此行應打印 ,但它打印不相關的數字,如4096.

那麼,爲什麼我不能在這個數組中存儲矩陣?

回答

0

你的void arrFillRandom()功能分配新的內存和填充與 隨機數。 arrayPtr是一個局部變量函數內部,併爲其分配一個新值 不會更改傳遞的參數ptr1ptr2

爲了填補其地址傳遞給函數的數組時,只要將線

arrayPtr = malloc(sizeof(int) * sizeRow * sizeColumn); 

你也必須改變

(arrayPtr + i)[j] 

arrayPtr[sizeColumn * i + j] 

該函數內部。

+0

感謝您的解決方案,但我有點困惑。如果我不寫任何有關內存的內容,如果我不使用'malloc',編譯器如何知道應該爲這個數組分配多少空間?我想'matrix1 [2] [3]'和'matrix2 [2] [2]'就夠了,對吧? 當我使用數組指針時,有時無法輕鬆理解事物。 – sedooe

+0

@lombranzo:是的,'matrix1 [2] [3]'* *已經是一個數組了。順便說一句,你可以調用你的函數作爲'arrFillRandom(matrix1,2,3,10);'因爲當一個參數作爲參數傳遞給函數時,數組「衰變」爲指向第一個元素的指針。 –

+0

我知道,但在分配時,它被要求像我寫的那樣調用該函數。再次感謝。 :) – sedooe