C言語仕様では、関数のローカル変数は他の関数ではアクセスできません。あなたが求めていることを行うための法的でサポートされた方法はありません。つまり、C言語のほとんどの(すべての)実装では、メイン関数の変数はスタックに格納されます。スタックは誰にでも読み書きが可能です(すべてがローカル情報を格納する必要があるためです)それは技術的に可能です(それは非常に悪い考えですが)。
void foo(){
int b; // puts a 4 byte word on the stack atop the return address
(&b)[2]; // interpret b as the first entry in an array of integers (called the stack)
// and offset past b and the return address to get to a
// for completeness
(&b)[0]; // gets b
(&b)[1]; // gets the return address
}
int main()
{
int a; // puts a 4 byte word on the stack
foo(); // puts a (sometimes 4 byte) return address on the stack atop a
return 0;
}
このコード、(32ビットx86システムのような)いくつかのシステムでは、main関数の内部変数にアクセスするかもしれないが、それは非常に簡単に壊れている(例えばあります場合は、このシステム上のポインタは、8バイトである場合スタック上のパディング、スタックカナリアが使用されている場合、各関数に複数の変数があり、コンパイラがどのような順序であるべきかに関する独自のアイデアがある場合、このコードは期待どおりに機能しません)。使用しないでください。使用しないでください理由がないのでパラメータを使用してください。
[ローカル変数のメモリはスコープの外部にアクセスできますか?](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-スコープ) – Stargateur
それは何のためのパラメータです。 – stark