菌菌菌 发表于 2020-1-23 13:29:53

return语句的位置

要求写一个找最大值的函数,我刚开始写的时候将return语句放在了循环里,结果正数数组可以找到最大值但是负数数组不行
然后我把return放在了循环外面,负数数组可以了,这是什么原理???


这是第一次写的:

int array_max(int a[], int len) {
        int x;
        int max;

        max = a;

        for (x = 0; x < len; x++) {
                if (max < a) {
                        max = a;               
                        return max;
                }       
        }
        return 0;
}


int main() {
        int a = {-1,-17,-4,-31,-10};
        int x;
        x = array_max(a, sizeof(a)/sizeof(a));
        printf("%d\n", x);

        return 0;
}

output: 0




这是修改之后的:(main不变)

int array_max(int a[], int len) {
        int x;
        int max;

        max = a;

        for (x = 0; x < len; x++) {
                if (max < a) {
                        max = a;               
                }       
        }
        return max;
}

output:-1

酷小子 发表于 2020-1-23 15:00:50

修改前:
      若找到max < a, 将a赋值给max后,立刻执行return max,而停止对a[]中剩余数据比较。
        若没有max < a, 将执行return 0
修改后:
        不管有没有max < a,max会和a[]中所有数据比较后被返回
main()中,a[]中的最大值为 - 1。
执行修改前代码,由于没有执行if,所以return 0; 输出是0。
修改后,max和a[]中所有数据比较完,值没有被更改,return max,返回 - 1

菌菌菌 发表于 2020-1-24 09:17:38

酷小子 发表于 2020-1-23 15:00
修改前:
      若找到max < a, 将a赋值给max后,立刻执行return max,而停止对a[]中剩余数据比较 ...

哇,懂了懂了,谢谢
页: [1]
查看完整版本: return语句的位置