C-使用指针获取3D数组元素的总和



我需要使用其他函数'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数组的指针(用于表的指针(考虑使用rowcol而不是COLHIT

您需要将两个维度(行和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];

最新更新