댓글을 Toxic하게 달았더니 글지워버려서 씀
#include <iostream>
#include <string>
struct Member {
std::string name;
int age;
Member(std::string name, int age) :
name(name), age(age) {}
};
void swapMember(Member* const m1, Member* const m2) {
std::cout << (void*)m1 << std::endl;
std::cout << (void*)m2 << std::endl;
// wrong
// std::cout << &m1 << std::endl;
// std::cout << &m2 << std::endl;
}
int main() {
Member m1 = Member("A", 100);
Member m2 = Member("B", 200);
std::cout << &m1 << std::endl;
std::cout << &m2 << std::endl;
swapMember(&m1, &m2);
}
원문:
main에 있는 m1, m2주소가 swapMember() 인자로 복사해서 들어가는 pass by value잖아?
그럼 나는 swapMember()에 있는 출력문도 같은 주소를 출력할꺼라 생각했는데 아니네?
메모리 주소차이를 보니깐 main에있는 m1,m2는 Member객체 크기만큼 잘 나왔는데,
swapMember에 있는 m1,m2는 포인터크기인 8바이트 차이네?
왜 주소가 달라진건지 알수있을까?
call by value냐 call by reference냐 이런거 크게 신경안써도됨
그리고 두 객체 주소 사이의 거리가 객체 크기라고 생각하지마셈 데이터 구조 정렬때문에
디버거를 찍어봐도 되고 sizeof m1, sizeof(int), sizeof(string) 찍어봐도 됨
댓글 0