引数として渡さずに、関数から変数を返すことは可能ですか?例えば:
int example(int x, int y) {
int z = x + y;
return z
}
また、メイン機能に戻ったときにこれをどのように使用しますか?
引数として渡さずに、関数から変数を返すことは可能ですか?例えば:
int example(int x, int y) {
int z = x + y;
return z
}
また、メイン機能に戻ったときにこれをどのように使用しますか?
これはC++のような言語にとってはかなり基本的なことです。良い本を手に取って自分自身を助けることを検討してください:
決定的なC++ブックガイドとリスト
引数として渡さずに、関数から変数を返すことは可能ですか?
それは完全に有効です。なぜそうではないと思いますか?
値によって関数にローカル変数を返すことは合法です。変数のコピーが呼び出し元に返されます。
ローカル変数はそれが定義されているスコープ内にのみ存在するため、ローカル変数のアドレスを返すことはすべきではありません。
何を避けるべきですか?
int* example(int x, int y)
{
int z = x + y;
return &z;
}
メイン機能に戻ったときにこれをどのように使用しますか?
int main()
{
std::cout<<example(4,5);
return 0;
}
それは合法です。
変数zの内容がコピーされます。
int iElsewhere = 0;
iElsewhere = example(1, 2); // now iElsewhere == 3
Kamil Klimekのコメントで述べられているように、この質問は本当に基本的な基本的なC / C ++であるため、C++の小さなチュートリアルまたは紹介を読み始める必要があります。
引数以外の変数を返すことができます。以下のコードで問題ありません。
int example(int x, int y) {
int z = x + y;
return z;
}
この場合、返す値はintのようなプリミティブ型であるためです。しかし、変数のアドレスを返す場合は複雑なケースがあり、それはすでに天才的な方法で説明されています。
次に、その変数をメインで使用します
int main(){
int ret = example(4,5);
//do whatever with ret..
}
あなたの例は完全に素晴らしいです。許可されている離散値を返しています。内部で起こっていることは、関数からチップのレジスタの1つに値を返すことができるということです。わかりやすくするために、レジスタをひいきにしないために、通常、OSに応じて32/64ビット値です。
int、bools、floatなどのコアタイプを処理する場合、これらはレジスタに格納されるため、心配することなくこれを返すことができます。
返すことができる他のタイプの情報は、あるメモリへのアドレスのポインタです。これを行うと、戻り値はデータのアドレスにすぎない32/64ビットポインタになります。
実行するときに注意する必要があるのは、関数で実行される割り当てられたメモリが、メソッドで宣言された構造だけでなく、mallocまたはnew(それぞれCまたはC ++を使用する場合)を介して実行されるようにすることです。
たとえば、このようなものは悪いものであり、スタックが上書きされるときに問題が発生します(それがあなたの意図でない限り:))。
void * myfunction(){MYSTRUCT muylocalstructure; void * mypointer =&mylocalstructure; mypointerを返します。}