我是C的新手,我有一个计算一些变量的函数。但是现在让我们简化一下。我想要的是拥有一个“返回”多个变量的函数。虽然据我所知,你只能在C中返回一个变量。所以我被告知你可以传递一个变量的地址并按这样做。这是我走了多远,我想知道我可以伸出援助之手。关于C90禁止的东西,我得到了相当多的错误。我几乎是肯定的,这是我的语法。
说这是我的主要功能:
void func(int*, int*);
int main()
{
int x, y;
func(&x, &y);
printf("Value of x is: %d\n", x);
printf("Value of y is: %d\n", y);
return 0;
}
void func(int* x, int* y)
{
x = 5;
y = 5;
}
这基本上就是我正在使用的结构。有人能帮我一把吗?
答案 0 :(得分:8)
您应该使用*variable
来指代指针指向的内容:
*x = 5;
*y = 5;
您目前正在做的是将指针设置为地址5.您可能会使用糟糕的旧编译器,但是好的编译器会在将int
分配给int*
时检测到类型不匹配变量,如果没有明确的演员表,你就不会这样做。
答案 1 :(得分:3)
void function(int *x, int* y) {
*x = 5;
*y = 5;
}
会更改参数的值。
答案 2 :(得分:0)
除了其他海报为您的函数体建议的更改外,还要将原型更改为void func(int *,int *)
,并更改函数定义(在main下面)以反映void。如果未指定返回类型,编译器会认为您试图暗示返回int。
答案 3 :(得分:0)
当实际上它是func(int *,int *)时,你不能转发声明func(int,int)。而且,func的返回类型应该是什么?由于它不使用return,我建议使用void func(int *,int *)。
答案 4 :(得分:0)
您可以返回结构类型的单个变量。
#include <stdio.h>
#include <string.h>
struct Multi {
int anint;
double adouble;
char astring[200];
};
struct Multi fxfoo(int parm) {
struct Multi retval = {0};
if (parm != 0) {
retval.anint = parm;
retval.adouble = parm;
retval.astring[0] = parm;
}
return retval;
}
int main(void) {
struct Multi xx;
if (fxfoo(0).adouble <= 0) printf("ok\n");
xx = fxfoo(42);
if (strcmp(xx.astring, "\x2a") == 0) printf("ok\n");
return 0;
}