t
に値を割り当てる前に、次のコードで初期化する必要がありますt
か?コードは正しいですか?
void swap(int *x, int *y)
{
int *t;
*t = *x;
*x = *y;
*y = *t;
}
t
に値を割り当てる前に、次のコードで初期化する必要がありますt
か?コードは正しいですか?
void swap(int *x, int *y)
{
int *t;
*t = *x;
*x = *y;
*y = *t;
}
最初にポインタは必要ありません:
void swap(int *x,int *y)
{
int t; //not a pointer!
t=*x;
*x=*y;
*y=t;
}
int a = 10, b = 20;
swap( &a, &b); //<-----------note : Needed &
-
または、次のスワップ関数が必要な場合もあります。
void swap(int & x,int & y) //parameters are references now!
{
int t; //not a pointer!
t=x;
x=y;
y=t;
}
int a = 10, b = 20;
swap(a,b); //<----------- Note: Not needed & anymore!
コードの次のセクションは正しいですか?
いいえ!ワイルドポインタを逆参照しようとしているため、コードは未定義動作を呼び出します。
int *t;
*t=*x; // bad
むしろこれを試してください
int t; // a pointer is not needed here
t=*x;
またはこれ
int *t = x; // initialize the pointer
そのコードには未定義の動作が含まれています。
int *t;
*t=*x; // where will the value be copied?
それに加えて、それは意味がありません-ポインタではなく、値を格納するための一時変数が必要です。
int t; // not a pointer
t=*x;
*x=*y;
*y=t;
ポインタとしては正しいです。
宣言時に(またはインスタンスメンバーのコンストラクターで)参照のみを初期化する必要があります。
編集:しかし、コードにエラーが発生した場合は、パラメーターを逆参照しないでください(つまりint *ptr = otherPtr;
、問題ありませんint *ptr = *otherPtr;
) 。
ポインタがすでに初期化されているデータを指すようにしたいだけの場合は、データを初期化する必要はありません。ただし、その方法では、malloc関数の1つを使用して、整数に十分なヒープスペースを割り当てたいと考えています。
C / C ++でスワッピングを行うための適切で効率的な方法は、次のとおりです。
void swap(int *x, int *y) {
int *t = x;
x = y;
y = t;
}
これを行う正しい方法はここにあります
#include <stdio.h>
void swap(int *i, int *j)
{
int t;
t = *i;
*i = *j;
*j = t;
}
基本的にその理由はsharptoothによって説明されていますが、そのようなスワップを行うとバックグラウンドで何が起こるかについての詳細と説明があります。それがあなたのアイデアをクリアするのに役立つことを願っています。
int *t;
*t=*x;
t
逆参照できる有効な場所を指していません。
ポインタtに値を割り当てる前に、を初期化する必要がありますか。
はい、有効なメモリ位置を指すように初期化/割り当てます。そうでなければ、それはどこを指しますか。ガベージを指し示し、間接参照の未定義の動作につながる可能性があります。