指针或返回两个要打印的值

时间:2012-12-19 22:41:46

标签: c return-value precision key-value-store

我正在尝试编写获取2个值或返回一个值的函数。因此,当我想要使用函数时,我得到的值是我认为的地址

int function (int a, int *b, *c){
    int value;
    value=a*2; 
    (*b)=value/10;
    (*c)=value%10;
}

int main(void){
    int val1,p1,p2,rest1,rest2;
    val1=150;
    function(val1,&p1,&p2);
    rest1=p1*2+p2;
    rest2=p2;
    printf("%d m %d end %d"rest1,rest2,&p2);
}

我也想到只返回一个

int funct2(int a){
    int array [2];
    int b=(65*a)/100;
    int c=b%1000;
    array[0]=b;
    array[1]=c;
    return array;
}

int main(void)
{
    int a=18;
    int array[2];
    array=funct2(a);
}

也不起作用。

那么我怎样才能使函数获得2个值或将这2个值作为一个值...请帮助

3 个答案:

答案 0 :(得分:3)

这是不正确的:

printf("%d m %d end %d",rest1,rest2,&p2);

作为最后一个参数&p2,是int*p2的地址),但格式说明符是%d。改为:

printf("%d m %d end %d", rest1, rest2, p2);

要返回两个int,您可以定义struct并按值返回:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct int_pair
{
    int division_result, modulus_result;
};

struct int_pair function (const int a)
{
    const int value = a * 2;
    struct int_pair result;

    result.division_result = value / 10;
    result.modulus_result  = value % 10;

    return result;
}

int main()
{
    struct int_pair p = function(150);
    printf("%d %d\n", p.division_result, p.modulus_result);
    return 0;
}

如果C99 function()可以使用复合文字作为返回值:

struct int_pair function (const int a)
{
    const int value = a * 2;
    return (struct int_pair) { value / 10, value % 10 };
}

请参阅http://ideone.com/8PFtHq了解演示。

答案 1 :(得分:1)

尝试返回多个值时,

int funct2(int a){
int array [2];
int b=(65*a)/100;
int c=b%1000;
array[0]=b;
array[1]=c;
return array;
}

您正在返回一个未定义行为的局部变量,这意味着该程序不再被视为有效。

只需从main传递一个数组,然后更改将传播回main。

你的功能声明是这样的:

void funct2(int *a, int size){ //size is the number of elements

来自main()的电话会这样:

int a[2];
func(a, 2);

答案 2 :(得分:0)

第一个功能已修复:

void function1 (int a, int *b, int *c){
    int value;
    value=a*2;
    (*b)=value/10;
    (*c)=value%10;
}

int main(void){
    int val1,p1,p2,rest1,rest2;
    val1=150;
    function1(val1,&p1,&p2);
    rest1=p1*2+p2;
    rest2=p2;
    printf("%d m %d end %d\r\n",rest1,rest2,&p2);
}

修复了第二个功能:

int* function2(int a){
    int* array = (int*)malloc(2);
    int b=(65*a)/100;
    int c=b%1000;
    array[0]=b;
    array[1]=c;
    return array;
}

int main(void)
{
    int a=18;
    int* array;
    array=function2(a);

    //You can access array[0] and array[1]
    //...

    free(array);
}