값으로 전달에 대해 질문드립니다.
211
작성한 질문수 4
안녕하세요?
using namespace std;
void doSomething(int x)
{
cout << "In func " << x << " " << &x << endl;
}
int main()
{
doSomething(5);
doSomething(6);
int x = 6;
cout << "In main " << x << " " << &x << endl;
doSomething(x); // 6이 argument로써 parameter로 전달됨
doSomething(x + 1);
return 0;
}
결과
In func 5 010FF9F4
In func 6 010FF9F4
In main 6 010FFAC8
In func 6 010FF9F4
In func 7 010FF9F4
위 코드 진행과정이
1. doSomething(5)를 실행하면 매개 변수 x가 생성되고 값 5가 복사된다.
2. cout을 실행한다.
3. 매개 변수는 지역 변수이므로 doSomething함수가 종료되면서 사라진다.
4. doSomething(6)을 실행하며 위 과정을 반복한다.
이렇게 되는데, 3번에서 4번으로 넘어가면서 매개 변수가 사라지잖아요? 그런데 doSomething(6)을
실행하면 x의 메모리가 doSomething(5)에서의 메모리와 같고 인수가 무슨 값이 복사되든 메모리 주소가 동일한 결과를 얻었습니다.
제가 처음에 생각했을 때는 doSomething(6)이 실행되면서 또 매개 변수가 선언되니까 기존의 doSomething(5)와 다른 메모리 주소를 사용할 거라 생각했는데 그게 아니네요.
애초에 OS에서 인수값으로 무슨 값이 들어오든 너는 이 메모리 주소를 할당 해줄테니까 이 주소만써 이렇게 명령하고 그 메모리 주소를 기억하고 있는건가요?
아니면 x의 주소를 기억하는 포인터가 생성되면서 x는 함수가 종료되면서 사라지더라도 x의 메모리 주소를 기억하는 포인터를 통해 x의 주소를 기억해내는 건가요?
궁금한게 너무 많네요.. ㅜㅜ
답변 1
0
궁금한게 많으시면 빨리 배웁니다.
스택일 경우에는 함수 밖에 나갔다가 다시 들어왔을 때 같은 주소의 메모리가 배정될 가능성이 높습니다.
쌓았다가 뺐다가 다시 쌓는 구조이기 때문입니다. (C언어 강의 범위입니다)
질문 요령은 아래 참고해주세요.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
466
1
메모리 주소 10진수로 출력
1
653
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
499
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
534
1
메모리 주소에 관한 질분
0
679
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
549
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
443
1
Digit 뒤에 reference를 사용하는 이유
0
510
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
323
1
dat파일이...
0
539
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
644
1
복사 생성자 관련 질문이 있습니다.
0
454
1
수업 중 궁금한점이 있습니다.
1
390
1
라이브러리자체가 이해가 되지 않습니다.
0
561
1
마지막 예제 질문
0
302
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
375
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
411
1
friend함수 관련 질문이 있습니다.
0
312
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
447
1
3분 17초 질문
0
350
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
448
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
445
2
const Something &st에서 const를 빼면 안되나요?
0
300
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
493
1





