2010-11-18 29 views

回答

5

可以使用全局变量(或者,一个一点更好,你可以使用在文件范围内声明的静态变量) ,或者你可以改变你的函数来获取一个输出参数,但最终你只需要使用return声明,因为这真的是它的用途。

1
  1. 您可能有一个全局变量,您可以将值分配给。
  2. 您可以传递一个存储整数的对象,并且如果您在函数中更改它,它也会在其他地方更改,因为对象不是值类型。

它还取决于您正在使用的编程语言。

编辑:对不起,我没有看到C标记,所以忽略我的最后一句话

+0

这个问题被标记为C. – dreamlax 2010-11-18 10:31:52

+2

一个更合理的编辑应该是简单地删除你的最后一个陈述,不是吗? – 2010-11-18 10:34:23

+0

我们可以在不使用全局变量的情况下在Borland C编译器中执行... – Muthuraman 2010-11-18 10:36:25

4

两个标准方法的返回值进行的C函数是要么做明确与return声明,或使用指针参数并将其分配给指针处的对象。

还有其他的方法,但我不会因为害怕增加世界上的邪恶代码量而进入他们的行列。你应该使用其中的一个。

2

使用通过引用传递:

void foo(int* x, int* y) { 
int temp; 
temp = *x; 
x* = *y; 
y* = temp; 
} 

void main(void) { 
int x = 2, y=4; 
foo(&x, &y); 
printf("Swapped Nums: %d , %d",x,y); 
} 
+0

通过将整数转换为指针(实现定义的行为),然后将这些指针变量(指向int的指针)的地址提供给期望指向两个参数的int的函数,从而初始化x和y。 – dreamlax 2010-11-18 10:35:11

+0

*叹*。这是对如何搞砸C的一种测量,即手动将指针传递到C的仅复制参数mechanisim被视为“通过引用传递”。第二种方法是,你在示例中的第一个错误是错误的,导致谁知道在运行时会发生什么。 **这个答案是* Exhibit A *为什么C应该尽可能避免** – 2010-11-18 10:36:07

+0

我应该是这样的:int x = 2,y = 4; – 2010-11-18 10:37:42

1

通常您提供参考外部变量的函数。


void foo(int *value) 
{ 
    *value = 123; 
} 

int main(void) 
{ 
    int my_return_value = 0; 
    foo(&my_return_value); 
    printf("Value returned from foo is %d", my_return_value); 
    return 0; 
} 

+0

我不需要这种情况。试用Borland C编译器.... – Muthuraman 2010-11-18 10:38:06

+0

@Muthuraman - 我不确定你在说什么,但是这对我来说看起来很基本。它应该可以在你的Borland C编译器上正常工作。 – 2010-11-18 10:45:49

+0

如何用其他语句代替返回0;在你的代码 – Muthuraman 2010-11-18 11:20:02

0

简单的答案就像第一个原型一样,您必须使用return语句作为int返回值指示它。

原则上可以做一些可怕的事情,比如将一个指针指向一个int并将其作为参数传递,然后将其转换回来并对其进行修改。正如其他人所暗示的,你必须确保你理解这样做的所有含义,并根据你的问题来判断,我会说你不这样做。

0

int wel();
int main()
{
int x;
x = wel();
printf(“%d \ n”,x);
return 0;
}
INT WEL()
{
寄存器INT TVR的asm( “AX”);
tvr = 77;
}

在ubuntu机器上用GCC编译器编译。在Borland编译器中,返回的方式不同。

+0

这里我没有使用return语句。 – Muthuraman 2010-11-18 11:35:16

+0

为什么,哦,为什么,你想这样做?完全没有目的,不是标准C(甚至C,因为它取决于汇编程序),完全不可移植。 – Arkku 2010-11-18 11:36:10

+0

(哲学上也有人可能认为寄存器是一个全局变量。=) – Arkku 2010-11-18 11:42:00

0

如果您需要返回多个值,为什么不使用指向新分配结构的指针?

typedef struct { int a, char b } mystruct; 
mystruct * foo() 
{ 
    mystruct * s = (mystruct *) malloc(sizeof(mystruct)); 
    return s; 
} 

未经测试,但应该有效。

相关问题