从c中的另一个函数获取输出值

时间:2012-03-22 13:26:04

标签: c

int assign(int *m){
    //static int n = 9;
    // m = &n;    // will assign the value to the variable a = 9
    *m = 10;
    // int n =8;
    // m = &n;   //  will fail as the scope of the variable is within the function
    return 0;
}

int main(){
    int a ;
    assign(&a);
    printf("%d",a);
    return 0;
}

和:a = 10是否有其他方法可以获得输出(不传递地址并使用指针和参数到函数中)

1 个答案:

答案 0 :(得分:2)

C中的每个函数都允许您返回单个值。

int assign(......)
 ^
 |
output type

您可以使用return关键字执行此操作。返回某个东西的函数就像任何其他具有相同类型的表达式一样。

例如,如果你有:

int assign(void)
{
    return 10;
}

以下所有内容均有效:

int a = assign();
int b = (assign()*20)-assign()/assign();

您可能需要在参数中使用指针的原因是具有多个输出。

例如,取一个遍历数组的函数并返回最小值和最大值:

void minmax(int *array, int size, int *minimum, int *maximum)
{
    int i;
    int min_overall = INT_MAX;
    int max_overall = INT_MIN;
    /* error checking of course, to make sure parameters are not NULL */
    /* Fairly standard for: */
    for (i = 0; i < size; ++i)
    {
        if (array[i] < min_overall)
            min_overall = array[i];
        if (array[i] > max_overall)
            max_overall = array[i];
    }
    /* Notice that you change where the pointers point to */
    /* not the pointers themselves: */
    *minimum = min_overall;
    *maximum = max_overall;
}

并在您的main中,您可以像这样使用它:

int arr[100];
int mini, maxi;
/* initialize array */
minmax(arr, 100, &mini, &maxi);

修改:由于您询问是否有其他方法可以执行此操作,以下是一个示例(尽管我绝对不建议将其用于与您类似的用途):

struct assign_ret
{
    int return_value;
    int assigned_value;
};

struct assign_ret assign(void)
{
    assign_ret ret;
    ret.assigned_value = 10;
    ret.return_value = 0;
    return ret;
}

main

struct assign_ret result = assign();
if (result.return_value != 0)
    handle_error();
a = result.assigned_value;

我不建议这样做的原因是struct用于放置相关的数据。函数错误返回值及其数据输出无关。