我编写了这个程序来使用指针查找数组的总和,但是当我运行它时它崩溃了。为什么会发生这种情况?我做错了什么?
int GetValue(int *p[], int size)
{
int i, sum = 0;
for(i = 0 ; i < size ; i++)
{
sum += *p[i];
}
return sum;
}
int main()
{
int Array[6] = { 20, 30, 40, 50, 60, 70 };
int Array_Sum;
Array_Sum = GetValue(&Array[6], 6);
printf("Array Sum= %d", Array_Sum);
return 0;
}
最佳答案
这个...
int Array[6] = { 20, 30, 40, 50, 60, 70 };
将“Array”声明为 6 个 int
的数组。请注意,声明的名称是“Array”,而不是“Array[6]”。如果数组足够长,则后一个表达式在声明的上下文之外,将指定该数组中索引 6 处的元素,但该数组不够长,在索引 0 - 5 处只有 6 个元素。
如果数组足够长,&Array[6]
将计算出 Array
的第七个元素的地址(位于索引 6 处),但是您大概想要传递第一个元素的地址(索引 0 处)。表达式 &Array[0]
是一种编写方式,但大多数人会简单地编写 Array
,这是完全等价的。也就是说,您应该像这样调用您的函数:
Array_Sum = GetValue(Array, 6);
您的 GetValue()
函数还有问题:
int GetValue(int *p[], int size) { [...]
参数p
被声明为指向int
的指针。也就是说,函数签名完全等同于
int GetValue(int **p, int size) {
但是您实际传递的(实际上也是您想要传递的)是一个 int *
。你可以这样写...
int GetValue(int *p, int size) {
...或者如果您愿意,像这样...
int GetValue(int p[], int size) {
。完成此操作后,在函数内部,您应该以 p[i]
形式访问数组元素,而不是 *p[i]
。
关于使用指针的 C 数组求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750085/