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

时间:2018-03-31 07:15:48

标签: c arrays pointers multidimensional-array

我需要使用其他函数'int ADD'来对3D数组求和。我想通过使用指针传递数组并添加指针增加,但我坚持传递数组。这是我的代码。

tabulate

2 个答案:

答案 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数组的指针(指向表的指针)考虑使用rowcol而不是COL和{{1 }}

您需要将两个维度(行和列)传递给函数以及表的数量。

使用

调用该功能
HIT

该函数的原型应该类似于

ADD(tables, rows, cols, A);

然后,循环:

int ADD(int tables, int rows, int cols, int (*pA)[rows][cols])