wfy8627 2024-08-09 09:48 采纳率: 60%
浏览 11
已结题

c++定义方法返回值的问题

c定义函数,两个方法返回结构不一致:
结构体定义:

typedef struct DoubleArrayStruct{
    int size;
    double arr[10];
} ;

typedef struct DoubleArray {
    int size;
    double* arr;
} ;
方法定义:
double sumDoubleArray(const DoubleArrayStruct * arrayStruct) {
    if (NULL == arrayStruct || arrayStruct->size == 0) {
        return 0;
    }

    double sum = 0;
    for (int i = 0; i < arrayStruct->size; i++) {
        double val = arrayStruct->arr[i];
        sum += val;
    }

    return sum;
}
double sumArray(const DoubleArray* arrayStruct) {
    if (NULL == arrayStruct || arrayStruct->size == 0) {
        return 0;
    }
    double sum = 0;
    for (int i = 0; i < arrayStruct->size; i++) {
        double val = arrayStruct->arr[i];
        sum += val;
    }

    return sum;
}
当结构体中size赋值为10,数组赋值12345678910时,调用两个方法返回结果不一样:
sumDoubleArray求值: 9.543656185244807E179
sumArray求值: 50.0
为啥不一样呢?
  • 写回答

2条回答 默认 最新

  • a5156520 2024-08-09 10:38
    关注

    经过测试,发现函数可以正确计算出和。

    测试如下:

    #include <stdio.h>
    
    typedef struct DoubleArrayStruct{
        int size;
        double arr[10];
    } ;
     
    typedef struct DoubleArray {
        int size;
        double* arr;
    } ;
    
    double sumDoubleArray(const DoubleArrayStruct * arrayStruct) {
        if (NULL == arrayStruct || arrayStruct->size == 0) {
            return 0;
        }
     
        double sum = 0;
        for (int i = 0; i < arrayStruct->size; i++) {
            double val = arrayStruct->arr[i];
            sum += val;
        }
     
        return sum;
    }
    double sumArray(const DoubleArray* arrayStruct) {
        if (NULL == arrayStruct || arrayStruct->size == 0) {
            return 0;
        }
        double sum = 0;
        for (int i = 0; i < arrayStruct->size; i++) {
            double val = arrayStruct->arr[i];
            sum += val;
        }
     
        return sum;
    }
    
    int main(void){
        
        struct DoubleArrayStruct das = {10,1,2,3,4,5,6,7,8,9,10}; // 定义结构DoubleArrayStruct变量das。并初始赋值 
        double arr[10]={1,2,3,4,5,6,7,8,9,10};
        struct DoubleArray da = {10,arr};  // 定义结构DoubleArray变量das。并初始赋值
        
        // 分别调用两个自定义函数,求两个结构中成员变量的和 
        printf("%f\n",sumDoubleArray(&das));
        printf("%f\n",sumArray(&da));
        
        
        return 0;
        
        
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月9日
  • 已采纳回答 8月9日
  • 修改了问题 8月9日
  • 创建了问题 8月9日