Вы индексировать массив 1-D, как будто это 2-D массив а, но нет никакой необходимости, чтобы определить его как 2-D, и в любом случае, вы инициализируетесь как если бы это был 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
В качестве альтернативы, если вы хотите массив 2-D, а затем индекс в нем, как если бы это был массив 1-D, вы можете сделать это. Примечание. Я инициализировал массив по-разному, но 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
}
}
, когда вы передаете свой 2D-массив своей функции get-sum, почему вы используете двойной указатель? Я думаю, вы немного смущены. посмотрите здесь http://c-faq.com/aryptr/dynmuldimary.html – mik1904