2016-10-23 3 views
-2

Ich habe eine schwierige Zeit zu verstehen, wie ich initialisieren und 1 bis n Ganzzahlen zu jedem Element in einem zweidimensionalen Array hinzufügen kann.Initialisierung von n ganzen Zahlen in 2-dimensionalen Array

Zum Beispiel, wenn n = 5,

arr[5][5] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} };

I

for (int i = 0; i < sizeof(arr); i++) { for (int j = 0; j < sizeof(arr[i]); j++) { product[i][j] += 1; } }

+0

Könnten Sie bitte ein Beispiel zu geben ist zu benutzen? – kkmonlee

+0

@AndrewLi Das ist, was ich anfänglich versuchte, aber 'arr.length' existiert nicht in C. Ich versuchte' sizeof (arr) ', aber ich konnte kein richtiges Array bekommen. – kkmonlee

Antwort

2

Dieser versucht haben, sollten Sie einen Ausgangspunkt geben:

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

#define LENGTH 5 

int main(int argc, char** argv) { 
    int arr[LENGTH][LENGTH] = { { 0 } }; 
    for (int i = 0; i < LENGTH; i++) { 
     fprintf(stderr, "%p contains %d elements\n", (void *) arr[i], (int) sizeof(arr)/sizeof(*arr)); 
     for (int j = 0; j < LENGTH; j++) { 
      arr[i][j]++; 
      fprintf(stderr, "%d ", arr[i][j]); 
     } 
     fprintf(stderr, "\n"); 
    } 
    return EXIT_SUCCESS; 
} 

Beachten Sie, daß auf machen Sie den sizeof(foo)/sizeof(*foo) Trick, weil foo auf dem Stapel ist. Dies ist bei dynamisch zugewiesenem Speicher über Zeiger nicht möglich.

+0

Vielen Dank für Ihre Antwort. Ihre Lösung druckt jedoch "1 1 1 1 1" anstatt "1 2 3 4 5". Wie füge ich jedes Element hinzu? – kkmonlee

+0

Ich versuche nicht, deine Arbeit für dich zu tun, und stattdessen versuche, dir einen funktionierenden Startpunkt zu geben, um das Problem zu lösen. Man könnte über den Wert von "j" nachdenken und diesen Wert vielleicht zu "arr [i] [j]" hinzufügen, anstatt "arr [i] [j] ++" zu machen. Arbeite durch die Schleife und untersuche, was die Anfangs- und Endwerte sind. Sie können dann die Berechnung in der Schleife ändern, um dies für Sie zu tun. –

+0

Nahm mich eine Weile, aber ich habe es geschafft, danke! – kkmonlee

1

Also wenn ich verstehe Sie Frage richtig sind, möchten Sie 1 zu jedem Element in Ihrem Array arr[5][5] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5} } hinzufügen?

So:

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

#define ROWS 2 
#define COLS 5 

void print_array(int arr[][COLS], int nrows); 

int 
main(void) { 
    int row, col; 
    int arr[ROWS][COLS] = {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}}; 

    for (row = 0; row < ROWS; row++) { 
     for (col = 0; col < COLS; col++) { 
      arr[row][col] += 1; 
     } 
    } 

    print_array(arr, ROWS); 

    return 0; 
} 

void 
print_array(int arr[][COLS], int nrows) { 
    int row, col; 

    for (row = 0; row < nrows; row++) { 
     for (col = 0; col < COLS; col++) { 
      printf("%d ", arr[row][col]); 
     } 
     printf("\n"); 
    } 
} 

Oder wenn Sie wirklich sizeof() verwenden möchten, können Sie etwas tun:

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

#define ROWS 2 
#define COLS 5 

int 
main(void) { 
    int row, col; 
    int arr[ROWS][COLS] = {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}}; 
    int row_size, col_size; 

    row_size = sizeof(arr)/sizeof(*arr); 
    col_size = sizeof(*arr)/sizeof(**arr); 

    for (row = 0; row < row_size; row++) { 
     for (col = 0; col < col_size; col++) { 
      arr[row][col] += 1; 
     } 
    } 

    for (row = 0; row < row_size; row++) { 
     for (col = 0; col < col_size; col++) { 
      printf("%d ", arr[row][col]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 
1

Sie sind für Schleife sizeof den falschen Zustand mit (arr) ergibt 5 (Zeilen) * 5 (col) * 4 (ganze Zahl) = 100;

Daher führt Ihre for-Schleife zu undefiniertem Verhalten sizeof (arr [0]) ergibt 5 * 4 = 20;

Sie haben

rows_count=size(arr)/sizeof(arr[0]); 
col_count=sizeof(arr[0])/sizeof(arr[0][0]); 

Hier ist der Code

#include<stdio.h> 
void main() 
{ 
    int i,j; 
    int arr[5][5]={{1,2,3,4,5},{1,2,3,4,5}}; 
    printf("Sizeof(arr) : %d\n",sizeof(arr)); 
    printf("Sizeof(arr[0]) : %d\n",sizeof(arr[0])); 
    for (int i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) 
    { 
     for (int j=0;j<(sizeof(arr[0])/sizeof(arr[0][0]));j++) 
      arr[i][j] += 1; 
    } 
    for (int i=0;i<(sizeof(arr)/sizeof(arr[0]));i++) 
    { 
     for (int j=0;j<(sizeof(arr[i])/sizeof(arr[0][0]));j++) 
      printf("%d ",arr[i][j]); 
     printf("\n"); 
    } 
     printf("\n"); 

} 
Verwandte Themen