Ich weiß, es gibt eine Vielzahl von Threads, die genau die gleichen sind, aber sie erfüllen mich nicht. 1d-Arrays sind leicht zu verstehen. Um z.B. 2d Array funktioniert ich die folgende Lösung verwenden:Übergabe von nD-Array als Zeiger auf die Funktion
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define R 5
#define C 5
#define RANGE 500
void printArray(int (*)[C]);
void genRandArray(int (*)[C]);
void main(void){
int arr[R][C];
genRandArray(arr);
printArray(arr);
}
void printArray(int (*array)[C]){
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
printf("Array[%d][%d]/[%p] = %d\n", i, j, (*(array+i)+j), (*(*(array+i)+j)));
}
}
}
void genRandArray(int (*array)[C]){
static int initRand = 0;
if(!initRand){
srand(time(NULL));
initRand = 1;
}
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
*(*(array+i)+j)=rand()%RANGE;
}
}
}
Warum ich Zeiger nicht wie die in int verwenden kann, um den Zeiger:
void printArray(int **array){...
void genRandArray(int **array){...
Ich weiß nicht, wie Arrays tatsächlich funktioniert. Zum Beispiel I initialisiert statisch ein Array ..:
int arr[5][5];
Dann weiß ich, dass:
arr -> points to very first element of an array,
*arr -> points to first element of the "subarray", where one subarray is one row,
arr equals *arr;
(arr+1) equals *(arr+1);
Und so weiter. Wenn ich den Wert von ( (arr + i) + j) bekommen kann, warum kann ich nicht ** Arr als Argument in Funktion übergeben?
(* (arr + 1)) [3] < =>( (arr + 1) + 3) => warum Funktionsargument "int (* arr) [C]" korrekt ist, und „int * * arr "ist nicht?
Ich weiß, es ist ein häufiges Problem für Neulinge, aber ich würde gerne vernünftige, zufriedenstellende Erklärung bekommen. Danke für die Hilfe :)
Da 'int **' ist kein 2D-Array, aber - wie Sie bereits erwähnt - ein "Zeiger auf den Zeiger". Ein Zeiger ist kein Array oder umgekehrt. – Olaf
@Olaf Aber wenn '* arr',' * (arr + 1) 'usw. auf einen Zeiger zeigt, der auf eine tatsächliche Ganzzahl im Array zeigt, macht das nicht' arr' einen Zeiger auf einen Zeiger auf eine Ganzzahl? – Glaeqen
Warum schreiben die Leute '(* (* (array + i) + j))' anstelle von 'array [i] [j]' –