2010-11-18 12 views
-4

int型のXXXX(int型)または無効XXX(int型)return文を使用せずに呼び出し元関数に値を返す方法は?

+8

なぜあなたは単に 'return'を使用できませんか? – dreamlax

+1

これを展開する必要があります。 'return'文は、関数から値を返すために使うものです。あなたは何をしようとしていますか? –

+0

質問は本当に少し混乱しています。グローバル変数を使用することはできますが、「関数からの戻り値」と同じではありません。 – khachik

答えて

5

あなたグローバル変数(または、少し良く、あなたはファイルスコープで宣言された静的変数を使用することができます)を使用することができますのような関数プロトタイプ、または出力パラメータを取るように関数を変更することもできますが、最終的にはreturnステートメントを使用する必要があります。

1
  1. 値を割り当てるグローバル変数を持つことができます。
  2. 整数を格納するオブジェクトを渡すことができます。関数内で変更すると、オブジェクトは値型ではないため、別の場所でも変更されます。

これは、使用しているプログラミング言語によっても異なります。

編集:申し訳ありませんが、私はCの関数から値を返すために

+0

質問にタグが付いています。 – dreamlax

+2

もっと賢明な編集は単に最後の声明を消すだけでしたか? –

+0

グローバル変数を使用せずにBorlandのcコンパイラで行うことができます。 – Muthuraman

4

2つの標準的な方法は、どちらかにreturn文で明示的にそれを行うか、にあるCタグを参照してくださいので、私の最後の文を無視しませんでしたポインタパラメータを使用してポインタのオブジェクトに割り当てます。

他の方法もありますが、私は世界の邪悪なコードの量を増やす恐れがあるため、それらには入っていません。これらの2つのうちの1つを使用する必要があります。

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

+0

* sigh *。これは、手動でポインタをCのコピー専用パラメータに渡す方法が、「参照渡し」とみなされているということです。 2つ目の措置は、例での最初の亀裂が間違っているため、実行時に何が起こるかを知っていることです。 **この答えは、可能な限りCを避けるべき理由のための* Exhibit A *です。** –

+0

私は以下のようになっています:int x = 2、y = 4; –

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

+0

@Muthuraman - あなたが言っていることは分かりませんが、これはかなり基本的な標準Cのように見えます。 Borland Cコンパイラでうまくいくはずです。 –

+0

return 0の代わりに別のステートメントを使用する方法。あなたのコードで – Muthuraman

0

単純な答えには、最初のものと同じように、戻り値としてint return値を使用する必要があります。

原則として、intへのポインタをキャストしてパラメータとして渡し、キャストして戻して変更するなど、恐ろしいことをすることは可能です。他の人があなたに言及しているように、あなたがこれをすることのすべての意味を理解していることを確かめなければなりません。

0

int wel();
int main()
{
int x;
x = wel();
printf( "%d \ n"、x);
return 0;
}
int型WEL()
{
レジスタINTのTVRのASM( "斧")。
tvr = 77;
}

ubuntuマシンのGCCコンパイラでコンパイルされています。ボールドランドコンパイラでは、別の方法を返す。

+0

ここではreturn文を使用していません。 – Muthuraman

+0

そしてなぜ、なぜ、あなたはこれをしたいのですか?絶対に目的はありません。アセンブラに依存しているので標準C(あるいはCでもない)です。全く移植できません。 – Arkku

+0

(哲学的にも、レジスタはグローバル変数であると主張するかもしれません。) – Arkku

0

複数の値を返す必要がある場合は、新しい割り当て構造体へのポインタを使用しないでください。

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

テストされていませんが、有効である必要があります。

関連する問題