我需要使用其他函数'int add'来汇总3D数组。我想通过使用指针并增加指针增加来传递数组,但我坚持通过数组。这是我的代码。
int(*pA)[COL][HIT] = A;
printf("Sum Of Array A : %d",ADD((*pA)[COL][HIT]);
system("pause");
}
int ADD(int(*pA)[COL][HIT])
{
int sum = 0;
for ((*pA)[COL][HIT] = 0; (*pA)[COL][HIT] < 10 * 7 * 6; (*pA)[COL][HIT]++)
{
sum = sum + (*pA)[COL][HIT];
}
return sum;
}
看来您需要的是指示程序中显示的以下内容。
#include <stdio.h>
#define N1 2
#define N2 3
#define N3 4
long long int add( int ( *a )[N2][N3], size_t n )
{
long long int sum = 0;
for ( int ( *p1 )[N2][N3] = a; p1 != a + n; ++p1 )
{
for ( int ( *p2 )[N3] = *p1; p2 != *p1 + N2; ++p2 )
{
for ( int *p3 = *p2; p3 != *p2 + N3; ++p3 ) sum += *p3;
}
}
return sum;
}
int main(void)
{
int a[N1][N2][N3] =
{
{
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 }
},
{
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 }
}
};
printf("Sum Of Array a : %lld", add( a, N1 ) );
return 0;
}
程序输出是
Sum Of Array a : 60
另一种方法是将3D数组重新诠释为1D数组。例如
#include <stdio.h>
#define N1 2
#define N2 3
#define N3 4
long long int add( int *a, size_t n )
{
long long int sum = 0;
for ( int *p = a; p != a + n; ++p )
{
sum += *p;
}
return sum;
}
int main(void)
{
int a[N1][N2][N3] =
{
{
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 }
},
{
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 },
{ 1, 2, 3, 4 }
}
};
printf("Sum Of Array a : %lld", add( **a, N1 * N2 * N3 ) );
return 0;
}
您的变量名称令人困惑,因为您使用的是指向2D数组的指针(用于表的指针(考虑使用row
和col
而不是COL
和HIT
您需要将两个维度(行和Cols(传递给该功能以及表的数量。
使用
调用该功能ADD(tables, rows, cols, A);
和该函数的原型应该是
int ADD(int tables, int rows, int cols, int (*pA)[rows][cols])
然后,在循环中:
for (int i = 0; i < tables; i++)
for (int j = 0; j < rows; j++)
for (int k = 0; k < cols; k++)
sum = sum + pA[i][j][k];