c - 将二维数组传递给函数会返回意外的输出

标签 c arrays vector

这个程序的目的是计算多个 vector 的长度,然后按大小对它们进行排序,我编写了一个函数 VL,以一维数组作为输入以及上述数组的长度,并在另一个程序中对其进行了测试,看起来效果很好。

VL函数

double VL(double w[], int num)                         /*Calculate vector length*/
{

int k;
double presqrt;
double length = 0;

for (k = 0; k < num; k++)
{
    presqrt += w[k] * w[k];
}
length = sqrt(presqrt);

return length;
}

主函数(该函数的大部分内容已经给出。)在该行下,我编写了一个小 for 循环来测试该函数是否使用此输入返回了正确的幅度。

int main(void)
{
int dim, num ;
int i, j;
double **w;

scanf("%d %d",&dim,&num);                            /* read N and M */
w = calloc(num, sizeof (double *));                   /* allocate array of M        pointers */
for(i=0; i<num; i++)                                /* allocate space for N dimensional vector */
{
    w[i]= calloc(dim,sizeof(double));              /* read the vector */
    for (j=0; j<dim ; j++)
    {
        scanf("%le",&w[i][j]) ;
    }
}
<小时/>
for(i=0; i<num; i++)                        /*printing vector lengths(test)*/
{
    printf("%.2f\n", VL(w[i], num));
}
<小时/>
return 0 ;
}

最佳答案

VL 函数中,将乘法结果添加到 presqrt

presqrt += w[k] * w[k];

但是 presqrt 的初始值尚未定义。

请在VL函数内一开始就将其初始化为0.0:

double presqrt = 0.0;

关于c - 将二维数组传递给函数会返回意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43138381/

相关文章:

c++ - 数组作为函数参数查找数组长度时出错

java.lang.UnsatisfiedLinkError : TestJni. print(LA;)V 错误在 Ubuntu 上

C 文件到多个 char *groups by word delimiter

java - 在 Java 中使用 char 索引访问数组

c++ - Vector 中的动态内存分配

c - 为什么“while(!feof(file))”总是错误的?

java - 如何在 JAVA 中打印数组列表?

c# - 如何将数组的一部分复制到新数组。 C#

c++ - 添加 vector c++。无法理解编译错误

c++ - 在 C++ 中初始化二维 vector