将3D指针数组传递给函数

时间:2017-02-10 22:51:29

标签: c++ c function pointers multidimensional-array

所以我在使这个测试程序工作时遇到了问题。所以我的目标是在我的main函数中创建并初始化一个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]);
            }       
        }
    }           
}

2 个答案:

答案 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]);

答案 1 :(得分: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