所以我在使这个测试程序工作时遇到了问题。所以我的目标是在我的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]);
}
}
}
}
答案 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