2017-09-13 88 views
-3

我想用零填充第2和第4列。到目前爲止,我已經實現了這一目標,但我無法弄清楚爲什麼。主要我試圖用零填充整個陣列。在random1中,我嘗試用隨機數填充特定單元格。我用for (j=0;j<25;j=j+2)爲了填充每個第二列的隨機數,但還沒有實現它。誰能幫忙?提前致謝!如何填充C中的多維數組中的特定列?

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

//int random1 (int); 

int random1 (int b[5][5]) 
{ 
    int i,j; 
    int *onedim = (int *)b; 
    srand(time(NULL)); 
    for (j = 0; j < 25; j = j + 2) 
     onedim[j] = rand() % 19 - 9; 
    for (i = 0; i < 5; i++) 
    { 
     for(j = 0; j < 5; j++) 
     { 
      printf("%d\t", b[i][j]); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

int main (int argc, char **argv) 
{ 
    int i, j; 
    int a[5][5]; 
    for(i = 0; i < 5; i++) 
     for(j = 0; j < 5; j++) 
     { 
      a[i][j] = 0; 
     } 
    random1(a); 
    return(EXIT_SUCCESS); 
} 
+1

你得到的結果是什麼?似乎爲我工作(我用'444444'替換了隨機,看得清楚 –

+0

你對'int *'的轉換調用了未定義的行爲。爲什麼不使用2D索引?並且適當地格式化這個混亂,它是新的不可讀的。 – Olaf

+0

@Olaf:我不這麼說,與指針數組相反,2D數組是連續的,鑄造成int *'是可以的 –

回答

1

您的循環正在填充隨機數字的每一個其他值,因爲您在「扁平」數組中增加了2。你不能跟蹤目前的行或列這樣(或者你必須使用模塊,以及更好地堅持二維陣列在這種情況下......)

最簡單的方法是選擇一列二,對於每一行(放棄這一1D指針想法,這裏是沒有用的)

for (i=0;i<5;i++) 
{ 
    for (j=0;j<5;j+=2) 
    { 
     b[i][j] = 44444; // let's fix the value just to see clearly 
    } 
} 

我所做的測試(固定值,所以我看到發生了什麼修改):

44444 0  44444 0  44444 
44444 0  44444 0  44444 
44444 0  44444 0  44444 
44444 0  44444 0  44444 
44444 0  44444 0  44444