当前位置:  开发笔记 > 程序员 > 正文

浮点数不正确的大小 - C.

如何解决《浮点数不正确的大小-C.》经验,为你挑选了1个好方法。

我正在编写一个程序,在给定BMP文件的情况下进行一些图像过滤.我有一个为我做过滤的函数,但需要我得到的特定输入,stdin我的程序需要将它们放入正确的格式.其中一个函数输入需要是一个浮点数组.此数组的大小由用户平方输入的数组宽度确定.因此输入3将产生一个大小为9的数组(模拟矩阵.为了进一步阅读我正在做的事情,请查看此Wikipedia链接).

我的程序正确接收过滤器宽度.它正确计算数组/矩阵大小值.但是,当初始化浮点数组以将值放入时,它会错误地执行此操作.

这是相关代码:

    int filter_width;
    filter_width = atoi(argv[3]);

    // Initializing variables for the filter weights array
    int filter_matrix_size;
    filter_matrix_size = filter_width*filter_width;
    float filter_weights[filter_matrix_size];

对于3的滤波器宽度输入,我应该在这里为我的3个变量获取以下值:

过滤宽度:3

滤镜矩阵大小:9

大小filter_weights[]= 9

但是当我测试我的程序时,我的大小filter_weights[]是36.我不知道这个数字来自哪里,它正在破坏图像过滤.我在这里错过了什么吗?



1> Ryan Haining..:

sizeof计算数组的总大小,而不是元素的数量.假设sizeof(float) == 4你的系统,那么你就拥有了

sizeof(float) == 4
sizeof(float[2]) == 8 (2 * sizeof(float))
sizeof(float[9]) == 36 (9 * sizeof(float))

如果你想要元素的数量,你可以除以第一个元素的大小

float arr[N];
(sizeof arr / sizeof arr[0]) == N

sizeof arr == (N * sizeof(float))
sizeof arr[0] == sizeof(float)

程序员经常为此定义一个宏:

#define LEN(A) (sizeof (A) / sizeof (A)[0])

float arr[N];
LEN(arr) == N

虽然我个人远离它,因为当使用指针而不是数组时它可能会令人困惑.

float *arr = malloc(/*whatever*/);
LEN(arr) == sizeof(float*)

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有