월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C++
중요한 부분은 아니지만 강의 내용에 오타가 있습니다.
int main() { Fruit apple(APPLE); if (apple.getType == APPLE) //강의 코드 //if(apple.getType() == APPLE) 수정 후 코드 { cout << "Apple" << endl; } return 0; } apple.getType은 compile eror를 발생시켜서 apple.getType()으로 수정해줘야 할것같습니다.
- 미해결홍정모의 따라하며 배우는 C++
결국 화려한 기교가 끝나야 기본이 보이는건가..
(바쁘면 안읽어도 되는 글 강의 후기) 질문칸에 안올렸다고 뭐라하진 마세요 그냥 강의 확인하다가 손이 따라가는대로 적었습니다. +--------------------------------------------------------------------------------------------------------------------+ 이 강의를 언제 구입한지는 기억이 안 나는데 그래픽을 조금 더 자세히 알고 싶어서 이 강의를 보던 도중 고속 컴퓨팅에 대해 공부해 보라는 (홍) (정) (모) 쌤의 권유 때문인지도 모르겠습니다. 처음에 강의를 볼 때는 저는 파이썬도 해봤고 자바 프로젝트도 해봤고 C언어를 공부했으나 프로젝트를 해보지 않았던 터였고Houdini 라는 프로그램에서 오브젝트 개체를 수많은 네트워크로 전송시키면서 유체가 되었다가 불꽃이 되었다가 랜더러가 요구하는 쉐이딩 파라미터도 넘겨줘 봤으니까C++만 할 줄 알면 방구석에 박혀있던 PBRT 라는 랜더링 책을 이해할 줄 알았습니다. 강의를 마치자마자 컴공 지식이 없던 저로서는 책에서 말하는 멀티스레딩 예제를 해봐도 실전도입은 굉장히 어려웠고인텔 TBB openMP 등의 내용이 빌드마저도 화가 치밀어 올랐습니다. 그래도 즐거움에 붙잡고는 있었지만, 각개 격파 또한 되지 않았던 과제였었습니다. 한동안 포기하고 있다가 조금 더 간접적으로 나를 이해시킬 수 있는 방법이 없던 터라 계획 없이 주저앉고 말았죠. 포인터 끊김이라고나 할까요 그러다 Houdini openCL 이라는 기능을 소프트웨어에서 지원한다길래 자세히 알기위해 찾던도중... 고속 컴퓨팅을 해보라는 권유가 홍정모쌤의 말씀이 생각났고 이것을 알기 위해선 병렬 프로그래밍을 공부해야 했는데 마땅히 비슷한 주제로 이 키워드를 따라가다 보니 CUDA 프로그래밍이 프로세스가 비슷해 보여서 예제와 유다시티에서 나오는 엔비디아 강의를 억지로 꾸역꾸역 삼켜서 깃허브 예제를 돌려도 보았습니다. 그러다 보니 openCL 에서 개념이 전문가 정도로는 아니지만 기본적인 예제코딩과 깃허브 자료를 그나마 돌려가면서 이해가 시작되었습니다. 비생산적인 코딩의 연속이였습니다. 책 속에서 말하는 몬테카를로 기법도 그래픽에서 근거해서 이해하려면 배경이 없으면 이해하기 힘들어서 딥러닝 강의와 시스템프로그래밍 OS부터 난공불락의 문제를 아래와 위에서 공격하며 땜질해서 듣던도중 우연히 알게 되었고 근삿값에 도달하기 위해 교수님 강의도 보다 보니 유튜브가 알아서 학습하게 되었습니다. 저에게 맞는 수학적 지식을 보강하기 위해 변형되어갈 때쯤에 비로소 남이 만들어 놓은 설계를 그나마 읽어내기 시작했습니다. Houdini_HDK / openGL / 불칸 / TBB / OpenMP / C++멀티쓰레드 / 유체엔진 예제 / GAN 시스템 프로그래밍 터미널 유체역학 강의 열역학 강의 기타 등등을 따로따로 하나씩 다 분해해서 따라 해보고 나니 그때서야 이 책을 (그나마) 읽어 나가고 있고 정신이 나태해지고 방향을 잃어가던 중 자포자기로 언리얼 자습을 빈둥빈둥 놀면서 보다가 C++ 강의를 오랜만에 다시 보게 되었습니다. 이 강의가 숲을 이야기 하려던 것을 조금 더 가깝게 느껴집니다. 계속 참고하면서 이 강의는 사용하려고요 제가 샀을 때는 6만 원대인데 지금은 만 원대라 쫌…. 불편하내요 쌤; 엣헴;; 그래픽에서 연기를 만들기 위해 수많은 VDB박셀에 가두었던 솜방망이 포인트 폴리곤 attribute 들이 결국엔 점으로 컨트롤이 가능하지만 데이터를 어떻게 소싱을 하느냐의 주제로 새로운 라이브러리로 들어오는 것을 느끼고 아무리 어려운 그래픽 알고리즘도 결국 수학적 모델링을 근거로 한 페이크이기 때문에 두렵지는 않습니다. 모르면 찾으면 되니까요 다만 아직도 대단한 그래픽을 하는 사람으로는 거듭나지 못했내요 죽을 때까지 무언가를 할 것은 생긴 거 같은 게 전부인 거 같습니다. 결론은: 강의 좋다구요 ㅇㅇ! +--------------------------------------------------------------------------------------------------------------------+ 느낀 점: 사람은 숟가락을 질문하고 알기 위해선 결국엔 지구에 살아보지 않은 인간이라는 존재라도 또는 그러지 아니한 존재라면 인간의 생활적 패턴을 가진 배경의 사람이 되어보아야 C++이란 숟가락은 그저 밥을 퍼먹는 도구일 뿐이야 라고 말해주면 알 수 있지만 그것을 모르는 인간의 시점이 아닌 다른 시점으로 무언가를 설명하기 위해선 먹는 행위와 인간이 어떻게 생존하는지에 따른 배경과 문화를 알아야 하는 것도 있고 왜 하필 팔로 먹어야 효율이 높고 왜 숟가락은 그렇게 생겼으며 그 비율이 황금비율인지를 설명을 해줘야 그 음식을 먹는다는 행위를 설명할 수가 있다고 생각합니다. 저는 그것을 하기 위해 쓸모없는 시간을 보낸 것도 같지만 가장 행복한 시간을 이 강의를 시작으로 보냈다고 생각합니다
- 미해결홍정모의 따라하며 배우는 C++
2.5 부동소수점수 12:00
선생님이 numeric_limits<float>::min() 에서 min은 표현할수있는 가장작은 숫자의 절댓값을 의미한다라고 하셨는데 numeric_limits<float>::min() 의 output 은 1.17539e-39이고 numeric_limits<float>::lowest()의 output은 -3.40282e+38 이라고 나왔습니다 그렇담 min 에서는 lowest 에서 절댓값을 붙힌 3.40282e-38 값이 나와야하는거 아닌가요?
- 미해결홍정모의 따라하며 배우는 C++
[08:24] 함수의 주소와 멤버 함수 주소의 차이
강의 중 8분 24초에 아래와 같이 함수포인터를 초기화합니다. int (Something::*fptr1)() = &Something::temp; 여기서 '&'를 제거하고 Something::temp 초기화하면 non-standard syntax 에러가 발생하는데요. 7.9 장에서 함수 포인터를 배울때는 아래와 같이 함수포인터의 함수의 이름이 포인터이기 때문에 함수의 이름으로 초기화하는데요. 멤버함수의 이름은 멤버 함수의 주소를 나타내지 않나요? int func() { return 5; } int main(){ int(*fcnptr)() = func; return 0;}
- 미해결홍정모의 따라하며 배우는 C++
32분 14초에서
-98을 2의 보수로 나타낼때 1의 보수에 1만 더하면 되니까 -98 ->1의 보수 1001 1101 ->2의 보수 1001 1110 으로 되는 것이 맞나요? 마지막에 -98이 0110 0010으로 되있어서 헷갈립니다.
- 미해결홍정모의 따라하며 배우는 C++
초기화 방식의 차이점에 대한 질문이 있습니다.
복사 초기화, 대입 초기화, 유니폼 초기화 이 세가지의 초기화 방법들의 차이점이 있나요? 아니면 똑같은 역할을 수행하지만 아무 차이점이 없나요?
- 미해결홍정모의 따라하며 배우는 C++
9:00부분 질문
1) sizeof와 pow함수를 이용해 short로 표현할 수 있는 숫자의 경우의 수를 표현하는 부분에서 총 2번의 뺄셈을 하셨는데 첫번째 뺄셈은 sign에 대해서 1비트를 빼준 것이고 두번째 뺄셈은 0을 표현하는 부분을 뺀 것이라고 하셨는데 이 부분이 잘 이해가 가지 않습니다. signed 와 unsigned 모두 0을 포함하는 것으로 알고 있는데 왜 0울 표현하는 부분을 뺀 것인지 궁금합니다. 2) 추가로 pow함수를 사용하실 때 std::를 사용하셨는데 pow함수를 사용할 수 있도록 <cmath>헤더를 include했는데 namespace std에 접근까지 해야하는 이유가 있는가 궁금합니다. using namespace std;를 사용했음에도 별도로 std::를 붙이시는 부분이 조금 의아했던 부분이었습니다. std와 pow함수와 서로 연관된 부분이라도 있나요?
- 미해결홍정모의 따라하며 배우는 C++
Something class 안의 m_b 출력하는 법
밑의 질문에 명확한 해답이 없는 것 같아 다시 올립니다 강의 과정에 있던 m_b를 cout에 이어서 출력하면 'unknown override specifier' 또는 'illegal member initialization m_b is not a base or member'이라고 뜹니다 따로 getter함수를 만들지 않고 m_b를 출력하는 방법은 없을까요? 초기화나 생성자 생성은 가능하지만 출력하려니 왜 Something의 멤버가 아니라는 걸까요?
- 해결됨홍정모의 따라하며 배우는 C++
doSomething 안의 sizeof(student_scores) 와 main 안의 sizeof(student_scores)
항상 고생많으십니다. 공부하는 중에 햇갈리는 것이 있어서 질문 남깁니다. 11:00 ~ 12:00 에서 doSomething 안의 sizeof(student_scores) 와 main 안의 sizeof(student_scores)가 다르게 나오는데, 제가 이해하기로는 main함수 안의 student_scores 도 해당 배열의 첫번 째 주소이고, doSomething 함수의 매개변수로 넘어간 students_scores 도 마찬가지로 결국 student_scores 배열의 첫번 째 주솟값을 가지고 있는 것으로 알고 있습니다. 결론적으로 sizeof함수에 배열의 첫번째 주솟값을 하나는 main안에서 하나는 doSomething 함수안에서 넣어준 것인데 왜 여기서 main에 있는 것만 배열 전체 크기를 출력하고 doSomething 함수의 것은 포인터 변수의 크기만을 출력하는 지 궁금합니다. 그냥 단지 students_scores 배열이 main에서 정의 되었기 때문에 다른 의미를 갖는 건가요? 이건 제 추측인데, sizeof라는 함수가 매개변수의 주소를 접근해서 크기를 구하는데, main에서 정의된 배열은 그 주소들도 20개로 나열되있는 반면에, doSomething 안에 매개변수로 간 포인터는 students_scores 배열의 첫번째 주솟값을 저장하는 주소가 하나만 덩그라니 있어서 4byte만 출력되는 것인가요?
- 해결됨홍정모의 따라하며 배우는 C++
#배열의 인덱스 번호는 왜 0부터 시작하는가?# 에 대한 궁금증 해결글 나눔
책이나 영상 등을 통하여 '배열의 인덱스는 왜 0부터 시작하는가' 에 대해 알려주는 곳이 없어 항상 답답했습니다. 이번 배열의 기초론에서 선생님께서 '배열의 인덱스는 0부터 시작하는 것이, C언어와 메모리 구조상 이상적이다!' 라고 말씀하실때, 배열을 딱 처음 만났던 제가 생각이나서 저도 찾아보는 시간을 가지게 되었고, 배열을 처음 보시는 분들이 충분히 궁금하시리라 생각되어 이렇게 올려봅니다.궁금하신 분들은 슥 읽어보세요! :) 메모리 주소에 대해서도 간략히 다루니 도움이 되실것입니다! 또한 배열 수업 2-2 강의를 들으실때도 이해가 더 빠를거에요! <배열 인덱스는 왜 0부터 시작하는가> http://blog.daum.net/sualchi/13720450 글. 오상문 sualchi@daum.net 다음처럼 1차원 배열이 선언되었을 때, int a[10]; a 배열의 첫 번째 항목은 a[0]입니다. 얼핏 생각하면 첫 번째 항목이니 a[1]이 맞을 것 같지만 a[1]은 두 번째 항목입니다. 참고로, 배열 괄호 안에 위치를 가리키는 값을 인덱스(index)라고 부릅니다. 이제 배열 인덱스가 0부터 시작하는 이유를 살펴보겠습니다. 배열 이름은 그 배열이 저장된 메모리 시작 위치를 가리킵니다. 그러므로 1차원 배열에서 a가 가리키는 주소는 첫 번째 항목 위치와 같습니다. O O O O O O O O O O 주소 | a 배열 각 항목은 시작 위치를 기준으로 몇 칸 떨어진 곳에 있다는 식으로 접근합니다. a[0]은 a를 기준으로 0칸 떨어진 위치의 값을 다룹니다. 즉, 첫 번째 항목입니다. a[1]은 a를 기준으로 1칸 떨어진 위치의 값을 다룹니다. 즉, 두 번째 항목입니다. ... a[9]는 a를 기준으로 9칸 떨어진 위치가 값을 다룹니다. 즉, 열 번째 항목입니다. O O O O O O O O O O | | a [0] ... a[9] 참고로, a[10]은 열한 번째 항목인데 a 배열에 선언된 크기를 넘어가므로 에러가 발생합니다. 항목 10개 O O O O O O O O O O | | ??? a [0] ... a[9] a[10] 인덱스 범위 에러 이제 배열 인덱스가 왜 0부터 시작해야하는지 아시겠죠? ^^ <이상>
- 미해결홍정모의 따라하며 배우는 C++
std::cin 계산기 숙제 제출
입출력은 잘 되는데 어딘가 꾸리꾸리한 기분이 듭니다 특히 for문 부분 인데요, for문을 이렇게 구성해도 되는걸까 궁금하여 제출겸 질문글 올려봅니다 제 생각엔 while 반복문 안에서 추가적인 연산을 해서 안좋다는 느낌이 드는것 같습니다 선생님과 다른분들의 의견이 궁금합니다. https://onlinegdb.com/S1ZHXT_vD #include <iostream> // ########## std::cin 더 잘 써보기 ########## // 사용자가 의도하지 않은대로 입력하였을때 // ignore(), clear(), fail() // ########## TODO ########## // TODO 1: more operators *, / etc. // TODO 2: if, else 를 switch, case문을 이용하여 바꿔보시오 int GetInt() { while (true) { std::cout << "Enter an integer Number : "; int x; std::cin >> x; const short Short_Max = 32767; if (std::cin.fail()) // fail is true { std::cin.clear(); std::cin.ignore(Short_Max, '\n'); std::cout << "Invalid number, Please try again" << std::endl; } else // !fail is false { std::cin.ignore(Short_Max, '\n'); return x; } } } char GetOperator() { const char Operation[4]{ '+','-','*','/' }; // Operation[0] == '+' // Operation[1] == '-' // Operation[2] == '*' // Operation[3] == '/' while (true) { std::cout << "Enter an Operator(+, -, *, /) : "; char op; std::cin >> op; const short Short_Max = 32767; std::cin.ignore(Short_Max, '\n'); int i = 0; for (; i < 4; ++i) // 이 부분..? { if (op == Operation[i]) return op; } if (op != Operation[i]) // not Operation std::cout << "## Invalid operator, Please try again" << std::endl; } } void PrintResult(int x, char op, int y) { switch ((char)op) { case((char)'+'): std::cout << " Result = " << x + y << std::endl; break; case((char)'-'): std::cout << " Result = " << x - y << std::endl; break; case((char)'*'): std::cout << " Result = " << x * y << std::endl; break; case((char)'/'): std::cout << " Result = " << x / y << std::endl; break; default: std::cout << "## Not Found Operator" << std::endl; break; } } int main() { int Input; do { system("cls"); int x = GetInt(); char op = GetOperator(); int y = GetInt(); PrintResult(x, op, y); std::cout << "Again? (Replay : 0) : "; std::cin >> Input; } while (Input == 0); return 0; }
- 미해결홍정모의 따라하며 배우는 C++
9:12 초 class 내의 non-static 멤버 중 class 초기화시 {}는 되고, ()는 안되는 이유
class Something { private: B m_b{ 1024 }; } 강의에서는 curly bracket을 이용해서 class B의 멤버변수에 값을 할당하는데, bracket ()을 사용해서는 오류가 발생합니다. Member initializer list에서는 bracket을 이용해서 값을 할당할 때 bracket ()이 가능한데 어떤 차이가 있는지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C++
0은 signed 인가요? unsigned 인가요?
0은 signed 인가요? unsigned 인가요? 아니면 signed와 unsigned 둘 다 포함되나요? 제 생각에는 0이 둘 다 포함되는것 같아 while에서 조건으로 unsigned int count변수를 0을 포함한 값으로 줄때 오버플로우 문제가 생기는 것 같은데 0은 signed 인지, unsigned 인지 검색해도 잘 안나와서요,,ㅠ
- 해결됨홍정모의 따라하며 배우는 C++
(C++ 초보) && (독학하시는 분들)께 드리는 = ( enum class, switch 활용과 팁) 입니다!
저 또한 홍정모 선생님의 영상강의를 보며 배우는중인 C++ 신생아 인데요, 매 강의를 다 듣고난 뒤, 여러 사람들의 질답란을 읽으며 새롭게 알게되는 부분이 많이 있었습니다 그래서 저 처럼 질답란을 적극 활용하여 공부하시는 분들께 이번엔 제가 아는 것을 나누어주고 싶어 이렇게 글을 적어봅니다! 도움이 되셨으면 좋겠습니다! 부담갖지 마시고 재미로 읽으셨으면 좋겠습니다 :) <정리> 이번강의 switch - case - break (- default - break) 문법은 어떤 변수를 switch(조건) 조건 자리에 넣어 case(상수) 상수와 대조하여 변수와 상수가 같은(==) 값일 경우, 조건에 해당하는 case 의 코드를 실행시키고자 할 때 쓰이는 문법입니다 오늘의 코드를 사람과 가까운 고수준 언어 위의 '고오오오오수준 언어' 로 간단히 보면 이런 형식입니다 switch (변수) { case (상수 ex==0) : { // 변수 == 0 일 때 동작할 코드작성 } break; case (상수 ex==1) : { // 변수 == 1 일 때 동작할 코드작성 } break; . . . default: { //case에서 찾는 값이 없을때 동작. if문의 else와 같은 기능 } break; } 그리고 앞전 강의에서 배운 enum문(열거형) , enum class문(영역 제한 열거형) 열거체들은 상수에 이름을 부여해주는 기능입니다! 그래서 switch 문과 enum문은 함께 응용되어 많이 사용됩니다. <활용> 이렇게 Colors 라는 이름의 enum 문을 작성하면 상수 0 은 BLACK 이라는 이름을 갖게 되고, 상수 1 은 WHITE 이라는 이름을 갖게 되고, 상수2 는 RED 라는 이름을 갖게 되고, (3 == GREEN, 4 ==BLUE) cin, enum class, switch를 활용하여 이런 재밌는 코드를 작성하는 것이 가능해지게 됩니다! 사용자가 0을 입력하면 Black, 1을 입력하면 white 를, 사용자가 입력한 값이 case에서 찾을 수 없을 경우 '잘못 입력했다'고 콘솔창에 출력하는 코드입니다 빨간 밑줄은 명시적 형변환을 해주고 있는 모습입니다 형변환을 안해주면 아래와 같은 오류가 발생하기 때문입니다 'case에 있는 상수식이 enum class Colors 타입인데 왜 조건식에는 int 타입을 넣는거얏!' 하고 화내는 모습인듯 합니다ㅋㅋㅋ 그래서 switch 조건식도 Colors 사용자정의타입 으로 명시적 형변환을 하여 타입을 맞춰주었습니다. 그리고 switch 문이 꽤 길어보이고 복잡해 보이지만, 비쥬얼스튜디오에는 switch 문을 프로그래머가 더 빨리, 더 쉽게 입력할 수 있도록 도와주는 자동완성 기능이 존재합니다! < switch문 자동완성 > 'switch' 입력 → (tab) → enum class 이름 (위 예제에서는 'Colors')입력 → 다른곳 클릭 중간에 스페이스바나 다른 입력은 하지 않습니다. ( 참고 : https://ntbda.tistory.com/16 ) (참고2 : https://helloacm.com/code-snippet-auto-complete-on-switch-statement-using-enum-in-visual-studio/) 꽤 재미있는 기능이므로 여러가지 enum class를 활용하여 switch 문을 만들어보세요! 자동완성 단축키 연습 조금만 하시면 손에 금방 익어서 여러가지 switch 문을 작성하실 수 있으실겁니다! 여기까지 읽어주셔서 감사합니다 :D !! 잘못된 부분이 있다면 알려주세요 수정하겠습니다!
- 해결됨홍정모의 따라하며 배우는 C++
main()에서 Person을 이용하여 구조체타입 변수 생성시 메모리와 관련하여 궁금한 것
Person me; Person mom; Person dad; 질문1. main() 에서 이렇게 구조체타입 변수를 생성할 때에 각 변수마다 (me, mom, dad) 메모리에 공간이 각각 48 byte 만큼 할당되어 총 144 byte의 공간이 사용할 수 있도록 생성된 것 인가요? 질문2. 위처럼 main 에서 구조체타입 변수를 여러개 생성했을때 struct 구조체가 복사되어 사용할 수 있게 되는 방식인가요? 아니면 구조체 하나를 생성하고 그 구조체에 접근하여 사용할 수 있게 되는 방식인가요? 그림으로 그려보았을 때에 어떤 것이 가까운지 알려주세요. (1) 각 변수가 하나의 구조체에 접근하는 방식 (2) 각 변수마다 하나의 구조체를 갖게 되는 방식 (복사)
- 미해결홍정모의 따라하며 배우는 C++
numeric conversion과 numeric promotion 차이
선생님 고생많으십니다~ 강의 듣다가 혼동되는 것이 있어 질문 남깁니다. 7:24 구간에서 double d = 3; 을 초기화 해줄때 큰것을 작은것으로 보내거나 타입이 바뀌는 것을 numeric conversion 이라 하셨는데, 이것도 6:45 처럼 double에 float를 넣어주는 것처럼 double 에 integer 값을 넣어주는 것이기 때문에 numeric promotion 아닌가요? 혹시 integer는 정수이고 double float 는 부동소수점수 이기 때문에 numeric conversion이 되는 건가요? 답변 미리 감사드립니다.
- 미해결홍정모의 따라하며 배우는 C++
5:10초 경 벡터를 어레이라고 잘못 말씀하신건가요
듣고있는데 헷깔려서 질문남깁니다
- 해결됨홍정모의 따라하며 배우는 C++
std::cin.ignore(32767, '\n')과 numeric_limits 에서 이런 방법은 어떤가요?
<첫번째 질문> (1) std::cin.ignore(32767, '\n'); (2) std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 1번은 매직넘버를 쓰기 때문에 좋지 못한 코드이고, 2번은 <limits> 를 #include 해야 하고, 길어서 타이핑이 불편합니다. \n을 만날때까지 최대 32767 개 의 글자를 무시해라 라는 의미라면 ignore의 첫번째 매개변수에는 어떤 자료형의 signed 최대값이 인자로 들어가는구나 생각할 수 있습니다. 그 첫번째 인자로 INT_MAX 나 CHAR_MAX 같은 것을 사용하는건 어떻게 생각하시나요? <두번째 질문> INT_MAX 에는 2147483647 / CHAR_MAX에는 127 값이 들어있습니다. 제 생각엔 INT는 너~~무 많고(낭비), CHAR은 좀... 적은것 같습니다. 좀 더 넓었으면 좋겠습니다. 그렇다면 매직넘버를 사용하는 대신, Short 자료형의 최대값인 32767을 short 변수를 만들어 저장한 뒤, ignore함수의 첫번째 인자로 넣어주는 것 입니다. 위의 두 가지 방법에 대해서는 어떻게 생각하시나요?
- 해결됨홍정모의 따라하며 배우는 C++
local 지역변수와 static 정적변수의 메모리에 대한 질문
(다른 cpp, h파일과 전역변수는 사용하지 않은 모습입니다) int a = 1 ; 이라는 a 변수는 코드블럭을 빠져나갈때 메모리를 가졌다가 사라졌다가 새로 호출되면 메모리를 가졌다가 사라졌다가 를 반복하여 호출시마다 a = 1 로 초기화가 계속 이루어진다는 말씀과, static int a = 1; 의 static a 변수는 하나의 메모리를 (정적으로) 재사용하여 값이 변화한한다 라는 말씀을 듣고 궁금해서 각 a 의 주소를 찍어보았습니다. 제 생각에는 int a 가 메모리를 해제했다가 다시 받는것을 반복한다면 주소가 계속 바뀌어야 할 것 같은데 얘도 주소가 바뀌지 않고, static a 도 주소가 바뀌지않아서 혼란이 왔습니다. static a 는 고정적인 메모리라 값은 바뀌지만 주소가 바뀌지 않는것이 맞는데, int a 는 호출시마다 왜 주소가 똑같은 건가요...?
- 미해결홍정모의 따라하며 배우는 C++
c++초보입문자의 입장에서 좀 더 명확히 알고 싶어서 질문드립니다.
cout, cin , endl같은 기능들이 정확히 <iostream>에 정의가 되있는 건가요 아니면 namespace std안에 정의가 되어있는 건가요? 아니면 std라는 namespace가 <iostream>에 정의가 되어있어서 교수님께서 cout, cin , endl이 모두 <iostream>와 std에 정의되어있다고 하신것인지 궁금합니다.