C - 使用指针的数组总和

标签 c arrays pointers sum

我已经尝试了这两种方法的许多不同变体,但无法对数组求和。它作为指针传递给函数,需要计算均值并返回。

unsigned char calcMean(unsigned char *buffer, int height, int width)
{    
   unsigned char mean, sum=0;
   counter i, k;
   int size;

   size = width*height;

   mean = 0;
   for (i = 0; i < size; i++) {
       sum += buffer[i];
   }

   /*

   for(k=0;k<(width*height);k++)
   {
     mean = mean + *Buffer;
     frameBuffer++;
        printf("%d\n", mean);
   }        
   */   

    return sum;

 }

最佳答案

mean 可以是一个字符,因为您需要除以 size 来计算它。但是 sum 本身可以高达 size * 255(8 位 unsigned char)。 width * height 也可以溢出。

为了安全起见(在 32 位或 64 位机器上),请考虑以下事项:

16 位 * 16 位整数将需要一个 32 位整数(用于维度)。 大小最大为 4294967295 的无符号字符数组将需要 64 位的总和。

因此,如果可能,请使用显式整数大小 (C99):

uint8_t calcMean(uint8_t *buffer, uint16_t height, uint16_t width)
{    
   uint64_t sum=0;
   size_t i;
   size_t size;//size_t is large enough to store a pointer,
               //so it would have 32 or 64bits on corresponding platforms
               //(see uintptr_t, etc.)

   size = ((size_t)width)*((size_t)height);

   for (i = 0; i < size; i++) {
       sum += buffer[i];
   }

   return sum / size;
}

关于C - 使用指针的数组总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19400634/

相关文章:

c - 为什么这个 MPI 代码执行无序?

python - 如何在 C/C++ 中调用 Python 函数的简单示例

c - 在 main 外部和内部定义各种类型的数组

c++ - 如何在类中声明/实现某种类型的数组(C++)

c++ - 使用除法技术求数组的最大公约数

const 指向 const 的指针

c++ - 在 C++ 中应该以什么顺序释放内存?

c - Eclipse 中的 GDB 调试器找不到 FILE

c++ - 为什么我不能分配这个指针?

javascript - 从输入创建 JSON