월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C++
(6.9) 포인터 주소를 찍어보는 구간에서 질문이 하나 생겼어요.
안녕하세요! 6.9강의에서 포인터 주소를 하나하나 찍어보는 구간에서 질문이 하나가 생겼습니다. #include <iostream> using namespace std; int main() { int i = 2; int *ptr_i = &i; double d = 3.14; double *ptr_d = &d; cout << "int형 포인터 ptr_i의 크기는 " << sizeof(ptr_i) << endl; cout << "ptr_i가 참조하는 변수 자체의 크기는 " << sizeof(*ptr_i) << endl; cout << "double형 포인터 ptr_d의 크기는 " << sizeof(ptr_d) << endl; cout << endl; cout << "------이하 ptr_i------" << endl; cout << "-1번째 : " << uintptr_t(ptr_i - 1) << endl; cout << "0번째 : " << uintptr_t(ptr_i) << endl; cout << "1번째 : " << uintptr_t(ptr_i + 1) << endl; cout << "2번째 : " << uintptr_t(ptr_i + 2) << endl; cout << endl; cout << "------이하 ptr_d------" << endl; cout << "-1번째 : " << uintptr_t(ptr_d - 1) << endl; cout << "0번째 : " << uintptr_t(ptr_d) << endl; cout << "1번째 : " << uintptr_t(ptr_d + 1) << endl; cout << "2번째 : " << uintptr_t(ptr_d + 2) << endl; } 결과값은 아래와 같이 나왔습니다.int형 포인터 ptr_i의 크기는 8ptr_i가 참조하는 변수 자체의 크기는 4double형 포인터 ptr_d의 크기는 8 ------이하 ptr_i-------1번째 : 61244665680번째 : 61244665721번째 : 61244665762번째 : 6124466580 ------이하 ptr_d-------1번째 : 61244665440번째 : 61244665521번째 : 61244665602번째 : 6124466568 포인터는 결국 '주소를 담고있는' 변수에 지나지 않잖아요?x64 환경에서 포인터의 크기는 어떤 자료형을 가리키던 상관없이 8바이트인데, 그렇다면 ptr_i에서 -1, +1 연산을 수행하면 결과값들이 8씩 차이가 나야하는게 맞지않나요? 제가 이해한 바로는 (물론 잘못 이해하고 있겠지만..) 포인터는 변수니까, 해당 포인터를 담고있는 또 다른 메모리 공간이 있을거란 생각이 들어서요.
- 미해결홍정모의 따라하며 배우는 C++
4.2 29분 48초
안녕하세요 교수님. extern 설명하실 때, 초보자 중에 include로 cpp파일을 가져오는 사람도 있다 그러셨는데, 혹시 이런 방식으로 가져오면 안 좋은 방식인 건가요? 혹시 그렇다면 이유가 있나요??
- 미해결홍정모의 따라하며 배우는 C++
[0.4.0] Clean Solution 후 Starting Without Debugging 시 자동으로 Build가 됩니다
Debug / Release 시Build 하는 안내창이 안나오고 바로 빌드 후 실행됩니다!Solution Clean 된 상태는 확인했습니다. 설정을 잘못 한걸까요 ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C++
[0.4.0] VS 2022 에서 .ilk 파일이 Debug 폴더가 아닌 다른 폴더에 생성이됩니다
x64나 x83으로 빌드해도 다른 폴더에 .ilk 파일이 생성되는데 디렉토리를 변경해야할까요?
- 미해결홍정모의 따라하며 배우는 C++
다른 클래스에서 클래스 선언에 관한 질문이 있습니다.
이렇게 main에서 생성자를 이용한 클래스를 쓸 때는 생성자가 파라미터 값을 가지면 선언 시에 해당 파라미터 값을 넣어줘야 에러가 발생하지 않습니다. 하지만 이와 같이 다른 클래스에서 생성자가 있는 클래스를 선언할 때는 오히려 파라미터 값을 넣어주게 되면 에러가 발생합니다. 이는 왜 이런 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
레퍼런스 const 질문
void doSomething(const int& x){ cout << x << endl;}이 경우 값을 바로 넣어도 되기 때문에 굉장히 편해진다고 하시는데, 이 경우 굳이 const int x로 해도 똑같지 않나요??파라미터를 const int& x로 받으면 편해진다는 것이 잘 이해가 되지 않아 물어봅니다.
- 미해결홍정모의 따라하며 배우는 C++
3.9 연습문제 기사
#include <iostream>#include <bitset>int main(){ using namespace std; unsigned char option_viewed = 0x01; unsigned char option_edited = 0x02; unsigned char option_liked = 0x04; unsigned char option_shared = 0x08; unsigned char option_deleted = 0x80; unsigned char my_article_flags = 0; cout << "option_viewed " << bitset<8>(option_viewed) << endl; cout << "option_edited " << bitset<8>(option_edited) << endl; cout << "option_liked " << bitset<8>(option_liked) << endl; cout << "option_shared " << bitset<8>(option_shared) << endl; cout << "option_deleted " << bitset<8>(option_deleted) << '\n' << endl; //view article my_article_flags |= option_viewed; cout << "option_viewed " << bitset<8>(my_article_flags) << endl; //click like my_article_flags ^= option_liked; cout << "option_liked " << bitset<8>(my_article_flags) << endl; //click like again my_article_flags ^= option_liked; cout << "option_liked " << bitset<8>(my_article_flags) << endl; //delete if (my_article_flags & option_viewed) { my_article_flags |= option_deleted; } cout << "option_deleted " << bitset<8>(my_article_flags) << endl; return 0;}무슨 문제가 있는지 마지막 delete에서 build가 되지 않는 오류가 발생합니다. 이유가 무엇일까요?
- 미해결홍정모의 따라하며 배우는 C++
char *[] 자료형에 대해 질문 드립니다.
안녕하세요 강의를 수강 중에 char*[]자료형에 대한 질문이 생겨 글을 남깁니다제 컴파일러에서는 해당 방식으로 문자열을 저장하면 오류가 발생하는데, 이는 컴파일러 버전 때문인가요..?앞에 const를 붙여야 정상적으로 초기화가 되는데, main의 파라미터로 쓰이는 char *argv[]는 오류가 발생하지 않아 문의드립니다.
- 미해결홍정모의 따라하며 배우는 C++
수업 강의안 질문
혹시 강의안 정리되어 있는게 있을까요?어디 정리해서 까먹을때 마다 찾아보고 싶어서요.감사합니다.
- 미해결홍정모의 따라하며 배우는 C++
연습문제 질문입니다.
int num1{0}; 처럼 uniform initialization을 하게 되면 error가 뜨고 int num1(0) direct initialization을 하면 컴파일이 되는데 어떤 차이 인가요?
- 미해결홍정모의 따라하며 배우는 C++
6:21 assignTeacher
안녕하세요 수업을 들으면서 코드를 작성하던중 다음과 같은 오류가 나타나서 여쭈어봅니다. const 를 지우고 하면 문제없이 실행이 되는데 왜 이러는건가요 ?
- 미해결홍정모의 따라하며 배우는 C++
이중 포인터에 저장되는 것에 대해 궁금한 점이 있습니다.
이중 포인터에는 포인터의 주소만 저장이 가능한 것으로 알고 있습니다. 그래서 동적 다차원 배열을 만들 때 이중 포인터를 정의하면int** matrix = new int* [row];이렇게 정의가 가능합니다. 제가 이해가 안되는 부분은 바로 뒤에 나오는 반복문 입니다.for (int r = 0; r < row; ++r) { matrix[r] = new int[col]; }여기서 matrix에 저장되는 것이 new int[col] 인데, 이는 포인터가 가지는 행렬의 주소로 생각 됩니다. matrix[0]은 matrix 라는 이중 포인터 안에 저장되있는 첫번째 포인터를 나타내어서 저렇게 작성되는 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
소멸자에서 Exception Error가 발생하는데 원인을 잘 모르겠습니다.
안녕하세요, 9.12 이니셜라이저 리스트 강의 수강중에 동일한 코드 빌드시 그림과 같이 소멸자에서 에러가 납니다. 원인이 무엇인지, 제가 어떤 부분에 대한 이해가 부족한 것인지 짚어주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C++
6.8강 중에서 struct에 포인터 사용 부분에서 질문이 있습니다.
이와 같은 Mys 라는 struct가 있을 때 포인터 변수 k를 선언한 후 일반 정수값을 바꾸는 것은 가능한데, 포인터 변수를 이용해서 행렬값을 넣는 것은 불가능 한 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
대입 연산자 오버로딩 연습문제 질문
IntArray& operator = (const IntArray& source) { if (this == &source) return *this; delete[] m_data; m_length = source.m_length; if (source.m_data != nullptr) { m_data = new int[m_length]; for (int i = 0; i < m_length; ++i) m_data[i] = source.m_data[i]; } else m_data = nullptr; return *this; } IntArray& operator = (const std::initializer_list<int>& list) { // 어차피 IntArray와 Initializer_list는 다른 자료형이므로 같은 메모리를 공유하고 있지 않을 것이기 때문에 self-assignment 방지는 필요 없지 않을까? delete[] m_data; m_length = list.size(); m_data = new int[m_length]; int count = 0; for (auto & element : list) { m_data[count] = element; ++count; } return *this; } int main() { /* case 1) assignment operator 양 쪽 모두 IntArray인 경우 */ IntArray array1 {1, 2, 3}; IntArray array2 {4, 5, 7}; array1 = array2; cout << array1 << endl; /* case 2) assignment operator 오른쪽에 initializer list가 오는 경우 */ IntArray array3 {1, 2, 3}; array3 = {4, 5, 7}; cout << array3 << endl; return 0; } 수업 중 나온 연습문제에 대해 두 가지 방식으로 구현을 해보았습니다. operator overloading을 할 때 IntArray를 parameter로 받을 수도 있고, initializer_list를 parameter로 받을 수도 있다고 생각했기 때문입니다. 두 가지 operator overloading을 각각 따로 구현해보았을 때,(1) IntArray& operator = (const IntArray& source); 의 경우 main 함수에 있는 두 가지 경우가 모두 정상적으로 실행되는 반면,(2) IntArray& operator = (const std::initializer_list<int>& list);의 경우 case2)만 에러 없이 정상적으로 실행되었습니다. (case 1)에서 cout으로 확인해보면, 대입은 정상적으로 이루어졌으나 에러는 아래와 같은 에러메시지가 뜹니다!) operator overloading 시 parameter를 IntArray로 받는 (1)의 경우, 대입 연산자 우측에 initializer list가 있는 case2에서는 실행이 되면 안될 것 같은데 에러메시지 없이 대입가능한 이유가 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C++
제가한 선택 정렬 코드 리뷰 가능할까요?
제가 먼저 풀고, 풀이를 보려 했는데 어지러워서제가 한게 좀더 간단한거 같아 혹시 다른 분들 의견이 궁금하여 여쭤 볼겸 평가 부탁드립니다
- 미해결홍정모의 따라하며 배우는 C++
벡터에 변수로 array 입력
std::vector<int> array; int arr[] = { 1, 2, 4, 5, 6 }; int* ar = new int[5]; ar = arr; //초기화 하는 법 std::vector<int> array2 = { 1, 2, 3, 4, 5 }; std::vector<int> array3 = arr; 벡터를 사용한 동적 배열의 경우에는 new int를 사용한 동적 배열처럼 변수로 입력 받아 배열을 만들 수 있는 방법이 없는지 궁금합니다. vector를 초기화 할 때 arr을 이용하려고 하니 계속 오류가 발생하는데, arr처럼 초기화 하기 위해서는 array3에 같은 값을 적어주는 방법 밖에는 없는 지 궁금합니다. 그리고 정적 배열에 비해 동적 배열이 가지는 장점이 사이즈를 런타임 중에 결정할 수 있다는 것만 있는지도 궁금합니다. 항상 친절하신 답변 정말 감사합니다.^^
- 미해결홍정모의 따라하며 배우는 C++
포인터 배열
이런 식으로 배열을 초기화 하게 되면, matrix에는 첫번째 원소의 주소만 저장이 되지만, 컴퓨터 내부에서는 row * col개의 원소 만큼의 주소를 matrix에 할당해주는 것인지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
for 문 사용 시 array 복사
강의 중 교수님께서 포인터가 array 에 주로 이용된다고 하셨습니다. 그 과정에서 사용하는 이유가 데이터를 파라미터로 넣어주면 다시 복사가 되고, 이를 for 문 안에서 실행시키면 계속 복사가 되어 느려져 사용한다고 하셨습니다. 여기서 복사가 된다고 하는 것이 for 문을 이용해서 array[i]의 i를 바꿔가며 새로운 값을 넣게되면 해당 array는 내용이 업데이트 되면서 계속 새롭게 생겨나서 느려진다는 것인지 궁금합니다. 강의의 어떤 부분에 해당 설명이 있는지도 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C++
Child에서 m_i(1) 초기화 안되는 이유가...
class Mother { public: int m_i; }; class Child : public Mother { public: Child() : m_i(1024) // <-------------------- error! {} }; 안녕하세요, Child에서 m_i(1) 초기화 안되는 이유가, 결국에는 Mother에서 초기화를 이미 했기 때문이라는 것일까요? 아니면 무조건 Mother에서 초기화를 해야한다는 것일까요?