0

我正在尝试编写获取 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 个值作为一个值.. 请帮助

4

3 回答 3

3

这是不正确的:

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

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

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

要返回两个ints,您可以定义 astruct并按值返回:

#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;
}

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

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

有关演示,请参见http://ideone.com/8PFtHq

于 2012-12-19T22:59:08.277 回答
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);
于 2012-12-19T22:46:39.610 回答
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);
}
于 2012-12-20T04:40:17.553 回答