在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("%dn", *(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("%dn", sum);
}
}
}
如果我理解您只想创建一个函数,该函数将数组元素作为参数的元素以及数组的尺寸以及数组的尺寸以及您的想法正确,但是很糟糕错误的语法。
而不是口头讨论每个更改,而是包含所有更改。查看变化以及为什么进行的变化:
#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 : %dn", 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] : %dn", k, sum);
}
return sum;
}
(注意: get_sum
提供的环路输出在添加每个行元素后是sum
的运行时间。您可以量身定制以满足您的需求。)
示例使用/输出
$ ./bin/get_sum
row[ 0] : 60
row[ 1] : 145
row[ 2] : 255
-----------
sum : 255
让我知道您是否有任何疑问。
您正在索引一个1-D数组,就好像它是2-D数组一样,但是无需将其定义为2-D,无论如何,您都将其定义它是一个1-D阵列。
#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("%dn", 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("%dn", sum); // moved out of inner loop
}
}