使用指针的 C 数组求和?

标签 c arrays pointers sum

我编写了这个程序来使用指针查找数组的总和,但是当我运行它时它崩溃了。为什么会发生这种情况?我做错了什么?

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/

相关文章:

c - 访问冲突读取位置 0x000000xx - c 结构属性 - Visual Studio

c - 生成数据通信流图(C程序,profiling)

c# - 将 byte[] 转换为基元数组的快速且节省内存的方法

C++:具有未知删除器的 unique_ptr

c - ClientHello 消息 ssl 中的 ProtocolVersion

c# - C# 中的 Array.GetLength(dimension) 是如何工作的?

php - 用php中的另一个数组值替换一个数组键

c++ - 如何将 int 和 int* 传递给函数来定义变量

c++ - C 与 C++ 中的指针

c - 如何简化大型条件语句