我需要使用其他函数'int ADD'来对3D数组求和。我想通过使用指针传递数组并添加指针增加,但我坚持传递数组。这是我的代码。
tabulate
答案 0 :(得分:0)
你需要的东西似乎是示范程序中显示的内容。
#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阵列重新解释为一维阵列。例如
#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;
}
答案 1 :(得分:0)
您的变量名称令人困惑,因为您使用指向2D数组的指针(指向表的指针)考虑使用row
和col
而不是COL
和{{1 }}
您需要将两个维度(行和列)传递给函数以及表的数量。
使用
调用该功能HIT
该函数的原型应该类似于
ADD(tables, rows, cols, A);
然后,循环:
int ADD(int tables, int rows, int cols, int (*pA)[rows][cols])