【问题标题】:returning an array with dinamically location in c在c中返回具有动态位置的数组
【发布时间】:2018-12-18 20:24:30
【问题描述】:

我必须返回一个数组double* b,并将它与函数arrays_equal 中的double* a 进行比较。代码不起作用,测试失败。我把相关代码写在这里:

double* array_copy(/*IN*/ const double* a, int n) {

   double *b;
   b = xcalloc(n,sizeof(double));

   for(int i = 0; i < n; i++){
       *(b + i) = *(a + i);    
       printf("%.2f\n",b[i]);   
       }     
   printf("%.2f\n",b[0]);

   return  b;
}

我在这里写下我的测试函数,我必须从我的 array_copy 函数中得到 double* b1:

void array_copy_test(void) {
    double a1[] = { 1.50, 2.30, 42.42 };
    double* b1 = array_copy(a1, 3);
    test_equal_b(arrays_equal(a1, b1, 3), true);
    free(b1);

等价函数:

bool arrays_equal(/*IN*/ const double* a, /*IN*/ const double* b, int n) {
    int j = 0;
    for(int i = 0; i<= n; i++){
        if(approx(*(a+i),*(b+i))){

        j++;
       }
    }      

if(n == j){
      return true;
     } else{return false;}

}


void arrays_equal_test(void) {

    double a3[] = { 1.5, 2.3, 42.43 };
    double b3[] = { 1.5, 2.3, 42.42 };
    test_equal_b(arrays_equal(a3, b3, 3), false);


}

bool approx(double a, double b) {
    return fabs(a - b) < 1e-6;
}

谁能告诉我,我的问题出在哪里?

【问题讨论】:

  • 你还没有显示函数test_equal_b。
  • test_equal_b 的兴趣是什么,而arrays_equal 可能返回 true 或 false ?比较真假? @Navidms arrays_equal 是如何实现的?
  • 你的相等性测试超出范围。
  • 非常感谢。这是我的问题,我应该写 i
  • 别难过,我们都犯过很多这样的错误。

标签: c arrays dynamic-memory-allocation


【解决方案1】:

您的代码有一些错误。首先你为什么写for(int i = 0; i&lt;= n; i++)?它将以这种方式迭代n+1 次。应该是for(int i = 0; i&lt; n; i++)。

那么您是否期望您的测试返回true:第三个元素完全不同a3[2] = 42.43,b3[2] = 42.42,差异远大于10e-6,因此它们不相等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多