繁体   English   中英

试图制作一个将所有值平方的函数。 在最后一个值上获取奇数

[英]Trying to make a function which squares all values in an array. Getting strange number on the last value

int squaring_function (int *array, int i);

int main()
{
    int array[5];
    int i;
    for(i=0; (i <= 5) ; i++)
    {
        array[i] = i;
        printf("\nArray value %d is %d",i,array[i]);
    }

    for(i=0; (i <= 5) ; i++)
    {
        array[i] = (squaring_function(array, i));
        printf("\nSquared array value %d is %d",i,array[i]);
    }

    return 0;
}

int squaring_function (int *array, int i)
{
    return pow((array[i]),2);
}

我正在尝试使用此squaring_function依次对数组中的每个值求平方(包含0到5的整数)。 它似乎工作正常,但是最后一个值(应该为5)^ 2不会作为25出现。cmd窗口我试图将数组大小减小为5(所以最后一个值为4),但是这也会打印不正确的数字。 我对C很陌生,不明白为什么最后一个值失败了。

我知道我可以在没有单独功能的情况下执行此操作,但是我很想了解为什么它不起作用。

任何帮助将非常感激。 谢谢,丹。

您的代码中有2个错误。 首先是您无法访问数组。 记忆规则是,对于n元素,索引必须小于n ,因此< 5而不是<= 5 如果要计数到5,则必须声明

int array[6];

另一个问题是您的代码将pow(5, 2) 5,2 pow(5, 2)计算为24.99999999,它被截断为24。数字24在array覆盖i之后立即移到内存位置; 然后导致array[i]评估为全为零的array[24]

使用array[i] * array[i]而不是pow来确保使用整数完成计算。

编码

int array[5];
for(int i=0; (i <= 5) ; i++)

超出数组范围并引入未定义的行为。 请注意, 0..5实际上是6个值,而不是5个值。如果您看到一些“有意义的”输出,那么好运或好运-这只是未定义行为的结果,它可以是所有东西(包括有时有意义的值)。

您的数组不足以容纳所有值。

大小为5的数组的索引范围为0-4。因此array[5]位于数组的末尾。 读取或写入数组末尾会引发未定义的行为

将数组的大小增加到6以适合所需的值。

int array[6];

其他答案显示了已发布代码中的缺陷。 如果您的目标是对数组的每个元素求平方,则可以编写一个对值求平方的函数

void square(int *x)
{
    *x *= *x;
}

并将其应用于数组的每个元素,或编写一个将整个数组作为输入并执行该转换的函数:

void square_array(int size, int arr[size])
{
    for (int i = 0; i < size; ++i)
    {
        arr[i] *= arr[i];
    }
}
// ... where given an array like
int nums[5] = {1, 2, 3, 4, 5};
// you can call it like this
square_array(5, nums); // -> {1, 4, 9, 16, 25}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM