无法在C中返回正确的变量

时间:2019-02-26 15:41:22

标签: c

我想尝试使用C编写Kadane算法。我不仅要返回最大子数组值,还希望返回开始索引和结束索引。

这是代码:

j

尽管最大和的答案是正确的,但是start和last的值确实很奇怪。我使用printf来检查kadane函数的for循环中start和last的值,在这里看起来工作正常。所以我认为问题可能与我返回变量的方式有关。

所以我修改了部分代码,如下所示:

#include <limits.h>
#include <stdio.h>

int kadane(int A[], int size){
    int current_max = INT_MIN;
    int global_max = INT_MIN;
    int start, last;

    for (int i = 0; i <= size; i++){
        if (A[i] > A[i] + current_max){
            current_max = A[i];
            start = i;
        } else {
            current_max += A[i];
        };

        if (current_max >= global_max){
            global_max = current_max;
            last = i;
        };
    };
    return (start, last ,global_max);
}

int main(){
    int sum, size, start, last;
    int A[] = {3,-4,5,1,9,-10,11,2,5,-1,2};
    size = sizeof(A)/sizeof(A[0]);

    start, last, sum = kadane(A, size-1);
    printf("start at %d ; end at %d; sum : %d\n", start, last, sum);
    return 0;
}

然后使用指针存储它们:

int kadane(int A[], int size){
    ......
    ......
    return (&start, &last ,global_max);
}

然后我收到“ Segmentation Fault 11”错误。

我试图在这里理解和搜索我在做什么,但我找不到它。唯一可行的解​​决方案是将变量start和last存储在全局变量中,这样我就可以在任何地方调用而无需返回。但是我觉得那不是一个合适的解决方案。有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

您有两种解决方案:

1:返回一个包含所有所需类型的结构。

struct data {
    int start;
    int last;
    int global_max;
};
struct data kadane(int A[], int size){
    stuct data test = { 1, 1, 1 };
    ......
    ......
    return test;
}

void main() {
    ......
    struct data t = kadane(A, ize);
}

2:使用指针传递值。

void kadane(int A[], int size, int *start, int *last, int *global_max) {
    ......
    ......
    *start = 1;
    *last= 1;
    *global_max= 1;
}

void main() {
    ......
    int a, b, c;
    kadane(A, size, &a, &b, &c);
}
  

来自   How do I return multiple values from a function in C?