2017-02-10 153 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

'空隙测试(INT数组2 [2] [3] [2])'和通过调用'试验(阵列)转储'p'东西;'和变化函数原型来匹配它的实现。 –

+0

我可以做到这一点,但它不会发送数组的指针。即时通讯试图找出如何做到这一点,以便我可以稍后修改函数中的数组通过指针 – 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