双指针帮帮我

时间:2016-06-18 07:13:30

标签: c

在visuals studio中我试着分别制作行数。但第一笔总和乘以4。我不明白这种情况

get_sum(int **q, int p, int n);

int main(void)
{
    int num[3][5] = { 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 };
    get_sum(&num[0][0], 3, 5);
}
get_sum(int **q, int p, int n)
{
    /*for (int i = 0; i < ; i++)
    printf("%d\n", *(q + i));*/

    for (int k = 0; k < p; k++)
    {
        int sum = 0;

        for (int i = 0; i < n; i++)
        {
            sum =*(q + n*k + i)+sum;
            printf("%d\n", sum);
        }

    }
}

2 个答案:

答案 0 :(得分:2)

如果我理解你只是想创建一个函数来对作为参数传递的数组的元素以及数组的维度进行求和,那么你就有了正确的想法,但语法错误。

这个简单的例子不是口头讨论每个变化,而是包含所有变化。查看更改及其原因:

#include <stdio.h>

int get_sum (int (*q)[5], int p, int n);

int main (void)
{
    int num[3][5] = {{ 10, 11, 12, 13, 14 },
                     { 15, 16, 17, 18, 19 },
                     { 20, 21, 22, 23, 24 }};

    int sum = get_sum (num, 3, 5);
    printf ("   -----------\n    sum : %d\n", sum);

    return 0;
}

int get_sum (int (*q)[5], int p, int n)
{
    int sum = 0;

    for (int k = 0; k < p; k++) {
        for (int i = 0; i < n; i++)
            sum += q[k][i];
        printf ("row[%2d] : %d\n", k, sum);
    }
    return sum;
}

注意: get_sum中提供的循环输出在添加每个行元素后正在运行sum。您可以根据自己的需要定制。)

示例使用/输出

$ ./bin/get_sum
row[ 0] : 60
row[ 1] : 145
row[ 2] : 255
   -----------
    sum : 255

如果您有任何问题,请与我们联系。

答案 1 :(得分:0)

您正在为一维数组编制索引,就好像它是一个二维数组,但不需要将其定义为二维数组,无论如何,您将它初始化为就像一维数组一样。

#include <stdio.h>

void get_sum(int *q, int p, int n);                                 // only one start

int main(void)
{
    int num[] = { 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 };   // 1-D linear array
    get_sum(num, 3, 5);
    return 0;
}

void get_sum(int *q, int p, int n)                                  // added return type
{
    int k, i, sum;
    for (k = 0; k < p; k++) {
        sum = 0;
        for (i = 0; i < n; i++) {
            sum = *(q + n*k + i) + sum;
        }
        printf("%d\n", sum);                                        // moved out of inner loop
    }
}

节目输出

60
85
110

或者,如果您确实需要二维数组,然后将其作为一维数组进行索引,则可以执行此操作。注意我已经以不同方式初始化了数组,但get_sum是相同的。

#include <stdio.h>

void get_sum(int *q, int p, int n);                                 // only one start

int main(void)
{
    int num[3][5] = {{10,11,12,13,14}, {15,16,17,18,19}, {20,21,22,23,24}};
    get_sum(&num[0][0], 3, 5);
    return 0;
}

void get_sum(int *q, int p, int n)                                  // added return type
{
    int k, i, sum;
    for (k = 0; k < p; k++) {
        sum = 0;
        for (i = 0; i < n; i++) {
            sum = *(q + n*k + i) + sum;
        }
        printf("%d\n", sum);                                        // moved out of inner loop
    }
}