C:使用指针的数组和

C:使用指针的数组和,c,arrays,sum,C,Arrays,Sum,如何仅使用指针获取数组的和 int array_sum(int *begin, int *end) { int arraysum = 0; int *p = 0; for (p = begin; p < end; p ++) { arraysum += *(arr + p); } return arraysum; } for(p=begin;p

如何仅使用指针获取数组的和

int array_sum(int *begin, int *end)
{
    int arraysum = 0;
    int *p = 0;
    for (p = begin; p < end; p ++)
    {
        arraysum += *(arr + p);
    } 

   return arraysum;
}
for(p=begin;p
这不起作用,因为无法添加
arr
p
。您不需要在
p
中添加任何内容,您的号码在
*p

至于原因:当您在标记上迭代时,即从
0
arraylength-1
,您总是使用开始指针并向其添加索引以查找您的编号。但是,在循环中,您将开始指针复制到
p
并直接递增
p
,因此
p
从第一个数字开始,在第二个数字递增一次,依此类推,直到
p
end
相同,请注意
p
作为条件

不理解循环是如何递增的。我们首先得到p=开始 (地址号码)对吗?它在p++上到底做了什么?它是p+ 1对吗?但是int地址的大小是4


指针算法使这成为可能。指针上的数学工作原理稍有不同,本质上是确保对象大小的倍数可以加/减。因此,将一个指针添加到int指针实际上会在引擎盖下添加
sizeof(int)
。这也是数组标记的工作方式,
array[i]
相当于
*(array+i)

您可以这样做

int array_sum(int *begin, int *end)
{
    int arraysum = 0;
    while (begin < end)
    {
        arraysum += *begin;
        ++begin;
    }
    return arraysum;
}
int数组_和(int*begin,int*end)
{
int-arraysum=0;
while(开始<结束)
{
arraysum+=*开始;
++开始;
}
返回arraysum;
}

为什么要添加
arr
p
?只需使用
*p
。这样我就可以得到arr[p]?这只适用于迭代非标记的情况。您正在迭代数组的内存位置,因此
p
始终指向当前数字。什么是
arr
?您需要发布所有代码。函数是如何调用的?什么是arr?啊,是的!我完全理解这一点
for (p = begin; p < end; p ++)
{
    arraysum += *(arr + p);
}
int array_sum(int *begin, int *end)
{
    int arraysum = 0;
    while (begin < end)
    {
        arraysum += *begin;
        ++begin;
    }
    return arraysum;
}