2017-02-10 3 views
1

, поэтому у меня возникают проблемы с работой этой тестовой программы. поэтому моя цель - создать и инициализировать 3D-массив в моей основной функции, а затем создать указатель на этот массив. после этого я пытаюсь передать указатель на функцию, а затем распечатать элементы в массиве, чтобы я мог видеть, как это работает. моя проблема возникает при попытке передать массив указателей tho. Может ли кто-нибудь из вас, ребята, понять, что я ошибаюсь?Передача массива 3D-указателей на функцию

#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

'недействительным тест (интермедиат array2 [2] [3] [2])' и 'дамп p' вещь, вызвав' тест (массив); 'и изменение прототип функции соответствует его реализации. –

+0

Я могу сделать это, но он не будет посылать указатель массива. im пытается выяснить, как это сделать, чтобы впоследствии модифицировать массив в функции через указатель – cooldude22

+0

Массив передал распады указателю. В определении функции указано, как ее использовать. –

ответ

0

Если вы хотите использовать:

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

Затем линия

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

в test потребности быть:

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

Вы также можете использовать:

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

Затем вам необходимо изменить функцию

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

или

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

, который позволит вам использовать:

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

Массив передается распады к указатель, и определение функции указывает, как его использовать. Функция не должна знать правильность индекса верхнего массива.

#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; 
} 

выход программы

In function 99 
In main 42 

 Смежные вопросы

  • Нет связанных вопросов^_^