2016-06-18 4 views
-2

ビジュアルスタジオで私はそれぞれの行を合計しようとしています。最初の合計に4を乗じたものです。私はとにかくそれが2次元配列であるが、2-Dとして定義する必要がない、とあれば、あなたのようにそれを初期化するとあなたは1次元配列のインデックスを作成しているdouble pointer help me

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); 
     } 

    } 
} 
+0

2次元配列をゲットサム関数に渡すと、なぜダブルポインタを使用していますか?私はあなたがちょっと混乱していると思います。ここを見てくださいhttp://c-faq.com/aryptr/dynmuldimary.html – mik1904

答えて

0

このような状況を理解していませんでしそれが1次元配列の場合

#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 

あなたはそれが1次元配列であるかのように、あなたがこれを行うことができ、その中に2次元配列して、インデックスをしたいならば。私は配列を別々に初期化しましたが、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 
    } 
} 
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 

ご質問があれば私に教えてください。