能解释一下为什么while (start < end)结束了循环

int sump(int * start, int * end)
{
   int total = 0;

while (start < end)
   {
      total += *start; 
      start++;
   }

return total;
}

这个要看你传入的实参定义时候的先后位置,因为局部变量在栈上分配位置的时候是向低地址延伸的,比如你在主函数中定义,int a;,int b;a在b之前定义
那么a的地址就比b高,你把a的地址给start,把b的地址给end,这样start就不会小于end,所以就结束了。更何况你这些传入的如果不是数组你这个函数真的没什么意义。

只有当start是指针变量时,才可以使用++这样的表达式。
*start++;

不知道你这段程序的背景是什么,看起来就是指针start指向的内存一直到指针end指向的内存,这段内存是连续的,应该是数组吧。然后这个数组的元素保存了int。
所以才可以这样相加求和。不然没什么意义的。

将数值或者一段地址内的所有整型数加起来。从开始的地址加到结束的地址。结束的那个地址上的数不加。

由于start++
start=end