2017-02-10 6 views
1

so habe ich Probleme, dieses Testprogramm zu arbeiten. Also ist es mein Ziel, ein 3D-Array in meiner Hauptfunktion zu erstellen und zu initialisieren, und dann einen Zeiger auf dieses Array zu erstellen. Danach versuche ich, den Zeiger an eine Funktion zu übergeben und dann die Elemente im Array auszudrucken, damit ich sehen kann, dass es funktioniert. Mein Problem tritt auf, wenn ich versuche, das Zeigerfeld tho zu übergeben. Kann irgendjemand von euch sehen, dass ich falsch liege?übergibt ein 3D-Zeiger-Array an eine Funktion

#include <stdio.h> 

//declare test function 
void test (int*); 

int main(){ 

    //declare array and pointer 
    int array[2][3][2]; 
    int (*p)[2][3][2] = &array; 

    int i,j,k; 

    //initialize array 
    for(i = 0; i < 2; i++){ 
     for(j = 0; j < 3; j++){ 
      for(k = 0; k < 2; k++){ 
       array[i][j][k] = 0; 
      }  
     } 
    } 

    //print array 
    for(i = 0; i < 2; i++){ 
     for(j = 0; j < 3; j++){ 
      for(k = 0; k < 2; k++){ 
       printf("%d\n", array[i][j][k]); 
      }  
     } 
    } 
    printf("----------------------------\n\n"); 
    //pass pointer array into test function 
    test(p);  
} 


void test(int (*array2)[2][3][2]){ 
    int i, j, k; 
    //run thru each element in the pointer array and print 
    for(i = 0; i < 2; i++){ 
     for(j = 0; j < 3; j++){ 
      for(k = 0; k < 2; k++){ 
       printf("%d\n", array2[i][j][k]); 
      }  
     } 
    }   
} 
+0

'Leere Test (int array2 [2] [3] [2])' und Dump die 'P' Sache von' Test (Array) aufrufen; 'und Veränderung der Funktionsprototyp, der seiner Implementierung entspricht. –

+0

Ich kann das ja, aber es wird nicht einen Zeiger des Arrays senden. Ich versuche herauszufinden, wie dies zu tun, so dass ich später das Array in einer Funktion durch einen Zeiger ändern kann – cooldude22

+0

Das Array übergeben zerfällt zu einem Zeiger. Die Funktionsdefinition gibt an, wie sie zu verwenden ist. –

Antwort

0

Wenn Sie verwenden:

int array[2][3][2]; 
int (*p)[2][3][2] = &array; 

Dann die Linie

  printf("%d\n", array2[i][j][k]); 

in test Bedürfnisse sein:

  printf("%d\n", (*array2)[i][j][k]); 

Sie können auch verwenden:

int array[2][3][2]; 
int (*p)[3][2] = array; 

Dann müssen Sie die Funktion zu

void test(int (*array2)[3][2]){ 

oder

void test(int array2[][3][2]){ 

, die Sie ändern lassen verwenden:

  printf("%d\n", array2[i][j][k]); 
0

Das Array an eine bestandene Zerfälle Zeiger, und die Funktionsdefinition sagt, wie man es benutzt. Die Funktion muss die obere Array-Dimension zum korrekten Indizieren nicht kennen.

#include <stdio.h> 

void test(int array2[][3][2]); 

void test(int array2[][3][2]) 
{ 
    printf("In function %d\n", array2[1][1][1]); 
    array2[1][1][1] = 42; 
} 

int main(void) 
{ 
    int array[2][3][2] = {0}; 
    array[1][1][1] = 99; 
    test(array); 
    printf("In main %d\n", array[1][1][1]); 
    return 0; 
} 

Programmausgabe

In function 99 
In main 42 
Verwandte Themen