如何打印作为参数传递的 int 数组的总和
How to print the sum of a passing a int array as a parameter
#include <stdio.h>
int sumofArrayNum(int numList[]);
int main(){
int result,numList[]={23,32,54,23,54,32,3,35};
result = sumofArrayNum(numList);
printf("sum= %d", result);
return 0;
}
int sumofArrayNum(int numList[]){
int sum = 0;
for(int i = 0; i < 10; ++i){
sum += numList[i];
}
return sum;
}
我每次构建和 运行 时输出都不同。
例如。输出是 sum = 1032918821
我想要的预期输出是 sum = 256
在numlist
中有8个元素表示for循环必须执行代码8次。
您的代码必须是:
for(int i = 0; i < 8; ++i)
{
sum += numList[i];
}
此代码迭代直到 i=7
,当 i=8
时它将结束循环。
关于for loop
的信息
int numList[]
等参数与 int* numList
相同,如果未 显式 定义,编译器将不知道它的元素计数。顺便说一句,int numList[8]
也与 int* numList
相同。 C语言不检查数组范围
有一些方法可以获取和检查数组大小。
- size/count参数
int sumofArrayNum(int numList[], int listSize){
int sum = 0;
for(int i = 0; i < listSize; ++i){
sum += numList[i];
}
return sum;
}
这里listSize
应该是count个元素。
并且您可以使用宏来隐藏计数参数:
#define sumofArray(array) sumofArrayNum((array), sizeof(array)/sizeof(*array))
- 指向整个数组
int sumofArrayNum(int (*numList)[8]){
int sum = 0;
for(int i = 0; i < sizeof(*numList)/sizeof(**numList); ++i){
sum += (*numList)[i];
}
return sum;
}
发送数组指针调用:
result = sumofArrayNum(&numList);
编译器(例如 gcc)可以对此进行弱检查:如果您发送的数组不是 int (*)[8]
.
,则发出警告
注意一定要保证数组的合法性,数组的大小必须是常量
此外,
Output is different each time I build and run it.
因为只定义了8个元素,索引范围是0〜7。 numList[8]
和 numList[9]
是未定义的,意味着任何值都是可能的。可能被使用,被其他进程更改,随机且危险。
#include <stdio.h>
int sumofArrayNum(int numList[]);
int main(){
int result,numList[]={23,32,54,23,54,32,3,35};
result = sumofArrayNum(numList);
printf("sum= %d", result);
return 0;
}
int sumofArrayNum(int numList[]){
int sum = 0;
for(int i = 0; i < 10; ++i){
sum += numList[i];
}
return sum;
}
我每次构建和 运行 时输出都不同。 例如。输出是 sum = 1032918821
我想要的预期输出是 sum = 256
在numlist
中有8个元素表示for循环必须执行代码8次。
您的代码必须是:
for(int i = 0; i < 8; ++i)
{
sum += numList[i];
}
此代码迭代直到 i=7
,当 i=8
时它将结束循环。
关于for loop
int numList[]
等参数与 int* numList
相同,如果未 显式 定义,编译器将不知道它的元素计数。顺便说一句,int numList[8]
也与 int* numList
相同。 C语言不检查数组范围
有一些方法可以获取和检查数组大小。
- size/count参数
int sumofArrayNum(int numList[], int listSize){
int sum = 0;
for(int i = 0; i < listSize; ++i){
sum += numList[i];
}
return sum;
}
这里listSize
应该是count个元素。
并且您可以使用宏来隐藏计数参数:
#define sumofArray(array) sumofArrayNum((array), sizeof(array)/sizeof(*array))
- 指向整个数组
int sumofArrayNum(int (*numList)[8]){
int sum = 0;
for(int i = 0; i < sizeof(*numList)/sizeof(**numList); ++i){
sum += (*numList)[i];
}
return sum;
}
发送数组指针调用:
result = sumofArrayNum(&numList);
编译器(例如 gcc)可以对此进行弱检查:如果您发送的数组不是 int (*)[8]
.
注意一定要保证数组的合法性,数组的大小必须是常量
此外,
Output is different each time I build and run it.
因为只定义了8个元素,索引范围是0〜7。 numList[8]
和 numList[9]
是未定义的,意味着任何值都是可能的。可能被使用,被其他进程更改,随机且危险。