gpt4 book ai didi

C - 使用指针的数组总和

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:51 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com