を未定義ている我々は、二つの選択肢があります: REF-スタイル:または我々はスワップ機能のために行動
void swap (int &a, int &b)
{
int temp;
temp = b;
b = a;
a = temp;
}
とポインタスタイル:
void swap (int *a, int *b)
{
int temp;
temp = *b;
*b = *a;
*a = temp;
}
REF-スタイル絶対に法的に私たちは、この関数変数がないことによって、値渡し を使用しようとするが、ポインタスタイルは、いくつかの問題を持っている参照しても、彼らはpointers- が実際に、我々はその楽し外のローカル変数のメモリを使用しようとしていますction、 とすることにより、いくつかの日には、いくつかのマシンでは、我々は未定義の動作を有していてもよく、また、コードは例のために動作します。このコードでは :
main()
{
//
{
int i=12;
int *j=&i;
}
//in this area, there is not variables i and j, but phisically threre is
// unsafe-relationship between this address: &i and what point to (12) ,
//any more logic according to this assumtion may be work
//but not safe -in the scene of undefined behavior-
"関数の外部にあるローカル変数のメモリを使用しようとしています"どのローカル変数? – songyuanyao
あなたが何を言っているのか、あなたが話していることや何を求めているのかははっきりしていません。より多くの、より短い、より明確な文章を書いてください。たぶん "使用"の例を挙げることもできます。 – philipxy
どちらの場合でも、呼び出し元は、有効な引数を渡すこと、つまり、 'a'と' b'が参照すること、または関数が返った後に生涯を持つものを指すことを保証することができます。それができる限り、あなたの関数の両方の形式の振る舞いはよく定義されています。 – Peter