인프런 커뮤니티 질문&답변

sunnyside0102님의 프로필 이미지
sunnyside0102

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

C++알고리즘 교안

교안 36p void 질문입니다.

해결된 질문

작성

·

68

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요.

좋은 강의 감사합니다.

교안 36p :void:리턴하는 값이 없다" 코드를

#include <bits/stdc++.h>

using namespace std;

int ret = 1;

void a() {

ret =2;

cout<<ret<<"\n";

return;

}

int main(){

a();

cout<<ret<<"\n";

return 0;

}

 

로 수정했습니다. 마지막에 cout만 추가한 것 입니다.

그러면 제 생각에는 값이 2 1 이 나와야합니다.

int ret =1 이 main 함수 밖에서 선언된 전역변수이고 a()함수에서 ret = 2라고 했지만 아무것도 반환하지 않았고, a 함수 내에서만 ret =2 라는 값을 가질거라고 생각했습니다.

하지만 디버깅 결과 2 2 가 나왔는데 왜인지 모르겠습니다ㅜㅠ

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅎ

전역변수 int타입의 변수를 함수에서 수정한다면 해당 변수는 해당 함수에서 변환된 값으로 변환되어야 합니다.

해당 부분의 코드를 설명하자면 다음과 같습니다.

코드 설명

코드를 설명하자면 다음과 같습니다.  

ret는 전역 변수로 선언되며, 초기 값은 1입니다. 전역 변수는 모든 함수에서 접근 및 수정이 가능합니다.

void a()는 반환 값이 없는 함수입니다.

함수 본문에서 전역 변수 ret의 값을 2로 변경하고  cout << ret << "\n";는 변경된 ret 값을 출력합니다. return;은 함수의 끝을 명시적으로 표시합니다. void 함수에서는 생략해도 됩니다.


참고로 다음과 같이 void가 아닌 int타입으로 해도 똑같이 나옵니다.

#include <bits/stdc++.h>

using namespace std;

int ret = 1;

int a() {

ret =2;

cout<<ret<<"\n";

return 0;

}

int main(){

a();

cout<<ret<<"\n";

return 0;

}


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


sunnyside0102님의 프로필 이미지
sunnyside0102
질문자

답변 감사합니다.

저는 함수 a() 내에서 전역 변수를 바꿀 시 그 함수 내에서만 ret=2이고 전역 변수는 바뀌지 않는다고 생각했는데 이것이 아니라 전역변수로 선언한 ret =1 을 a()함수에서 ret =2로 변경하면 main()함수에도 영향이 가는거 맞나요?

.

.

큰돌님의 프로필 이미지
큰돌
지식공유자

저는 함수 a() 내에서 전역 변수를 바꿀 시 그 함수 내에서만 ret=2이고 전역 변수는 바뀌지 않는다고 생각했는데 이것이 아니라 전역변수로 선언한 ret =1 을 a()함수에서 ret =2로 변경하면 main()함수에도 영향이 가는거 맞나요?

>> main함수가 아니라 전역변수에 영향 -> 해당 전역변수를 main함수에서 출력시 해당 값이 바뀌게 됩니다.

sunnyside0102님의 프로필 이미지
sunnyside0102

작성한 질문수

질문하기