これは私が持っているものです。ポインタの問題への参照?
void g(int *&x) {
int a = 3;
x = &a;
}
void h(const int *&x) {
int b = 2;
x = &b;
}
int main() {
int *p = new int;
*p = 5;
g(p);
cout << p << " " << *p << endl; // Print #2
cout << p << " " << *p << endl; // Print #3
const int*p1 = p;
h(p1);
cout << p << " " << *p << endl; // Print #4
cout << p << " " << *p << endl; // Print #5
}
私が理解から
、Print#2
とPrint#3
は同じ結果を持っている必要がありますが、私はそれをコンパイルするときにそうではありません。それはPrint#4
とPrint#5
にもなります。誰か助けてくれますか?
更新:これは、出力は私が自分のコンピュータ上でそれをコンパイルするときのように見えるです:
00EFF9D4 3 //1
00EFF9D4 1552276352 //2
00EFF9D4 2 //3
00EFF9D4 1552276352 //4
べきではない(1)及び(2)は同じになりますか? (3)および(4)のいずれかである。
関数 'g'では、' a'とは何ですか?私たちを表示するには、[最小、完全で、検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。また、期待された出力と実際の出力を示してください。 –
関数 'h'に関しては、ポインタが範囲外になるローカル変数を指し示すようにし、関数が返ったらそれを止めます。そのポインタを間接的に参照すると、プログラム全体が不正になり*無効になる[*未定義の動作*](http://en.cppreference.com/w/cpp/language/ub)が発生します。 –
おそらくtypoはint aであることを意図していました。 – Ron