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