우선, 정수형 포인터와 클래스 A
을 정의합니다. 그것을 저장하는 A
메서드에 대한 포인터를 전달하고 싶습니다.정수를 저장하는 메모리 블록의 값이 반복적으로 변경되는 이유는 무엇입니까?
A
메서드를 호출하면 A
클래스의 정수 멤버가 항상 변경된다는 것을 알게되었습니다.
이러한 변경을 피하는 방법에 대해 혼란스러워합니다.
#include <IOSTREAM>
using namespace std;
class A
{
private:
int* a;
public:
A()
{
};
~A()
{
};
void setA(int n)
{
cout << "n == " << n << "&n == " << &n << endl;
a = &n;
cout << "now a== " << a << endl;
}
void PassA(int* &outint)
{
cout << "a == " << a << " *a == " << *a <<endl;
outint = a;
cout << "outint = " << outint << endl;
}
void Print()
{
cout << "a ==================== " << a << endl;
cout << "*a ==================== " << *a << endl;
}
};
int main()
{
A A_1;
int num = 5;
A_1.setA(num);
int *intb= NULL ;
A_1.PassA(intb);
//When the line above done,the value of A_1.a will change.
cout << "intb == " << intb << endl;
cout << "*intb ==" << *intb << endl;
cout << "num ==" << num << endl;
A_1.Print();
return 0;
}
출력 :
n == 5&n == 0x28fe90 now a== 0x28fe90 a == 0x28fe90 *a == 2686708 outint = 0x28fe90 intb == 0x28fe90 *intb ==4619604 num ==5 a ==================== 0x28fe90 *a ==================== 4619604
할당 된만큼 메모리를 할당하는 방법에 대해 걱정할 이유가 무엇입니까? – Bill
main()에서 정의한 포인터를 클래스 멤버 포인터가 가리키는 포인터와 동일한 주소로 만들고 싶습니다. –
스택에있는 변수를 유지하는 것은 위험합니다 –