c - 尝试创建一个对数组中所有值进行平方的函数。最后一个值出现奇怪的数字

标签 c arrays function pointers variables

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);
}

我正在尝试使用此 squareing_function 依次对数组中的每个值(包含整数 0 到 5)进行平方。它似乎有效,但是最后一个值(应该是 5)^2 没有出现为 25。cmd window 我尝试将数组大小减少到 5(因此最后一个值为 4),但这也会打印错误的数字。 我对 C 很陌生,不明白为什么最后一个值失败了。

我知道我可以在没有单独的函数的情况下做到这一点,但是我很想知道为什么这不起作用。

任何帮助将不胜感激。 谢谢, 丹。

最佳答案

您的代码中有 2 个错误。首先是您访问数组越界。内存规则是 n元素索引必须小于 n,因此 < 5 ,不是<= 5 。如果你想数到5,那么你必须声明

int array[6];
<小时/>

另一个问题是您的代码计算 pow(5, 2)如 24.99999999 被截断为 24。数字 24 直接位于 array 之后的内存位置。覆盖i ;然后导致 array[i]评估为 array[24]碰巧都是零。

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

关于c - 尝试创建一个对数组中所有值进行平方的函数。最后一个值出现奇怪的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52957509/

相关文章:

c - 如何打乱矩阵

c - 为什么这段代码会出现段错误?共享内存IPC SYSV

c - cryptsetup中dm_task_create的实现在哪里?

c - 合并两个链表后无限循环

java - 我正在以输入的相反顺序显示 java 数组的内容,但只显示了一半的数组

R- 在函数内部赋值

java - 将一个数组传播到一个函数的多个参数中

c - 如何克服已定义但未使用的警告乐趣

arrays - 如何将包装为字符串的向量转换为 Pandas 数据帧中的 numpy 数组?

Javascript:根据子对象值在数组中抓取对象