私はC++に新たなんだと私は(&)正確にどのようにポインタ(*)と参照を学ぶために仕事をしようとしています。次のコードで"FOO(int型*&ポインタ)" 対 "のfoo(int型*ポインタ)"
:
#include <iostream>
using namespace std;
void test1(int* pointer)
{
int foo = 2;
pointer = &foo;
}
void test2(int* &pointer)
{
int foo = 3;
pointer = &foo;
}
int main()
{
int aux = 1;
int* p = &aux;
test1(p);
cout << *p << ",";
test2(p);
cout << *p << endl;
system("PAUSE");
}
1,3
を出力なぜtest1
はPが指したがtest1
ないされたメモリの場所を変更するために管理していますか?
test1
はPを変えていないので、その後、test1
にやっラインpointer = &foo;
は何ですか?
'test1'と' test2'の両方にバグがあります。スコープの外にある関数ローカル変数のアドレスを取っているので、ダングリングポインタが残っています – CoryKramer
@CoryKramer:実際は 'test1'それはローカル変数へのポインタを返さないので、ダングリングポインタを作成しません。 – rodrigo
@CoryKramer 'int * pointer'を新しく作成したオブジェクトに変更する正しい方法は何でしょうか? – Chapi