월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
fgets로 입력받은 문자열에 남는 부분
강의 14:30 코드를 치고 디버거로 확인해봤는데교수님의 경우 hello다음 \n이 있고나머지는 다 \0로 채워져있는데'?'가 채워져있네요. 왜 이럴까요?gets()함수로 문자열을 입력받은 후 배열의 나머지 자리에는 '\0'으로 채워지나요?또 gets()말고 scanf()든 fgets()도 '\0'로 채워지나요?scanf(),fgets()도 디버거로 확인해보면 다 '?'로 뜨네요.
- 미해결홍정모의 따라하며 배우는 C언어
13:44 질문 있습니다
float arr2d[2][4] = { {1.0f,2.0f,3.0f,4.0f},{5.0f,6.0f,7.0f,8.0f} }; float(*pa)[4]; float* ap[2]; pa = arr2d; ap[0] = arr2d[0]; ap[1] = arr2d[1]; printf("%p %p\n", ap, (ap + 1));이 부분에서 출력이 ap변수 본인의 주소가 출력되는건 이해 했습니다 . int arr[2][3] = { {1,2,3},{4,5,6} }; int* parr[2]; parr[0] = arr[0]; parr[1] = arr[1]; for (int j = 0; j < 2; ++j) { for (int i = 0; i < 3; ++i) printf("%d %d %d %d\n", arr[j][i], parr[j][i], *(parr[j] + i), *(*(parr + j) + i)); printf("\n"); }이 코드는 10.13강의 13:16초 부분에서 가져온 코드인데요 . 궁금한게 이중포문 안쪽 부분에서 *(*(parr + j) + i) <-- 얘가 계산될때 괄호에 의해서 (parr + j) 가 먼저 연산이 되잖아요 ?? 그러면 이때도 parr 본인의 주소값에 j가 더해져서 엉뚱한값이 나와야 할텐데 , 정상적으로 출력이 되어서 위에 ap변수가 본인의 주소값을 출력할때랑 어떤부분이 다른지 궁금합니다 ...
- 미해결홍정모의 따라하며 배우는 C언어
2차원배열이 함수에 들어왔을때
#include <stdio.h> #define ROWS 3 #define COLS 4 int sum2d_3(int* arr, int rows, int cols); int main() { int data[ROWS][COLS] = { {1,2,3,4},{5,6,7,8},{9,0,1,2} }; return 0; } int sum2d_3(int *arr, int rows, int cols) { int r, c, tot = 0; for (r = 0; r < rows; r++) for (c = 0; c < cols; c++) tot += *(arr + c + cols * r); return tot; }여기서 data는 포인터 연산시 자료형이 int(*)[4] 주소자료형입니다.2차원 배열 data를 함수의 안에 넣고 매개변수 int *arr로 사용할때 tot += *(arr + c + cols * r); 를 보면 마치 배열 arr가 1차원 배열인것처럼 사용되고 있습니다. Q.2차원 배열은 함수안에 들어가면 1차원배열처럼 포인터 연산이 되는건가요? 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
int (*pa)[4]와 int*pa의 차이
#include <stdio.h> int main() { float arr2d[2][4] = { {1.0f,2.0f,3.0f,4.0f},{5.0f,6.0f,7.0f,8.0f} }; float(*pa)[4] = arr2d; printf("%u %u \n", (unsigned)pa, (unsigned)(pa + 1)); printf("%u %u\n", (unsigned)arr2d[0], (unsigned)arr2d[1]); printf("%u %u\n", (unsigned)pa[0], (unsigned)(pa[0] + 1)); printf("%f\n", pa[0][0]); printf("%f\n", *pa[0]); printf("%f\n", **pa); printf("%f\n", pa[1][3]); printf("%f\n", *(*(pa + 1) + 3)); float* ptr = arr2d; printf("%u %u \n", (unsigned)ptr, (unsigned)(ptr + 1)); printf("%u %u\n", (unsigned)arr2d[0], (unsigned)arr2d[1]); printf("%u %u\n", (unsigned)ptr[0], (unsigned)(ptr[0] + 1)); printf("%f\n", ptr[0][0]); printf("%f\n", *ptr[0]); printf("%f\n", **ptr); printf("%f\n", ptr[1][3]); printf("%f\n", *(*(ptr + 1) + 3)); }강의 9:47에서 int(*pa)[4]가 나옵니다.강의 10:20에서 교수님께서 pa는 4개의 float자료형을 가진 배열에 대한 포인터라고 하셨습니다.저는 이것을 [4개의 float자료형을 가진 배열]의 배열에 대한 즉, 2차원배열에 대한 포인터라고 이해했습니다.float arr[4] = { 1.0f,2.0f,3.0f, 4.0f }; float(*pa)[4] = arr;Q1. 위처럼 (*pa)[4]에 1차원 배열도 넣을수 있는건가요? float(*pa)[4]에서 [4]가 헷갈리는것같습니다. 정확히 정의를 내리기가 힘듭니다. float(*pa)[4]란 무엇인가요?ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡpa는 어쨋든 그냥 단순한 포인터 변수 하나 라고 이해했습니다.그래서 똑같이float* ptr = arr2d; 포인터 변수를 하나 선언하고 거기에 2차원 배열([4개의 float자료형을 가진 배열]의 배열을 넣어줬습니다.저는 pa랑 ptr은 그냥 외형만 다를뿐 문법적으로 같은 포인터변수라고 이해했습니다.그런데 pa같은 경우printf("%f\n", pa[0][0]); printf("%f\n", *pa[0]); printf("%f\n", **pa); printf("%f\n", pa[1][3]); printf("%f\n", *(*(pa + 1) + 3));이중포인터처럼 사용가능한 반면ptr의 경우는printf("%f\n", ptr[0][0]); printf("%f\n", *ptr[0]); printf("%f\n", **ptr); printf("%f\n", ptr[1][3]); printf("%f\n", *(*(ptr + 1) + 3));이중포인터처럼 사용하면 밑줄이 뜨고 오류가 떳습니다.그림을 그려보니 ptr은 당연히 단순 포인터변수이기에 이중포인터처럼 사용은 불가능했습니다. Q2.그렇다면 어째서 pa는 포인터변수인데도 이중포인터처럼 사용이 가능한건가요? 또 pa와 ptr의 차이는 무엇인가요? 항상 감사합니다. 진짜 진짜 진짜 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
2차원 배열에서의 주소
#include <stdio.h> int main() { int arr[2][3] = { {1,2,3}, {4,5,6} }; printf("%u %u %u %u %u", arr+1 ,arr[1], &arr[1], &arr[0]+1, arr[0] + 1); return 0; }강의 4:50 화면을 보면서 궁금한게 있습니다.arr == arr[0] == &arr[0]이고arr+1 = &arr[1] == &arr[0]+1이므로arr[0]+1또한 arr+1 = &arr[1] == &arr[0]+1과 같은 주소값을 출력할거라 생각했는데 arr[0]+1을 출력하니 &arr[0][1]이 출력되었습니다.Q1. 그 이유가 무엇인가요?강의 3:18에서 arr[0]가 두번째 인덱스가 붙는 배열의 이름이라고 하셨는데 그러므로 arr[0]는 {1,2,3}의 첫번째 원소의 주소를 가리키는 포인터가 되고 arr[0] +1은 포인터연산에 의해 데이터 2의 주소를 가리키는 포인터가 되는건가요? 제가 제대로 이해한게 맞을까요?Q2. 그렇다면 2차원 배열 arr[2][3] = {{1,2,3},{4,5,6}}에서arr은 {{1,2,3},{4,5,6}}의 첫번째 원소{1,2,3}의 주소를 가리키는 포인터인데 첫번째 원소가 {1,2,3}이므로 이중포인터가 되는것이고, arr[0]는 {1,2,3}의 첫번째 원소의 주소를 가리키는 포인터가 맞나요?굉장히 헷갈리고 어지럽네요...감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
16진수에 대한 설명
<3.8 8진수와 16진수>강의에서 16진수에 대해 설명하시면서unsigned int의 최댓값을 각각 10진수, 2진수, 8진수, 16진수로 나타내주셨습니다.16진수의 표현에서 f가 8개인 이유는 16이 2의 4제곱이기 때문이라고 하셨는데 해당 설명의 메커니즘이 잘 이해가 되지 않아 질문드립니다.수강 후 공부해본 결과, 2진수 1111이 16진수에서 f 하나에 해당하기 때문에, 해당 unsigned int의 최댓값인 2진수의 32비트는 나누기 4를 하여 16진수에서 8자리가 나타난다는 것은 이해를 하였습니다.그러나 16이 2의 4제곱이라서 8개의 자리만 있으면 된다는 설명에 대해선 이해가 어려워 조금 더 구체적으로 알려주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
왜 int, long, long long 타입의 변수에 최솟값을 할당하면 언더플로우가 아니고 에러가 발생하나요?
오버플로우를 확인해보고 언더플로우도 확인해보려고 최솟값을 할당한 후 값에 -1을 할 계획이었습니다.그런데 최솟값을 할당하는 것 자체가 에러가 발생했습니다.에러는 error C4146로https://learn.microsoft.com/ko-kr/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4146?view=msvc-170위의 사이트에서 설명을 참고했습니다.그런데 위 사이트의 설명에 의한다면 char과 short도 최솟값이 할당이 안되고 에러가 나야할 것 같은데 char과 short는 최솟값도 할당이 잘 되고, 최솟값에 -1을 했을 때 언더플로우도 잘 발생(?)되었습니다.혹시 왜 그런것인지 알려주실 수 있으실까요..?!
- 미해결홍정모의 따라하며 배우는 C언어
gcc main.c 컴파일 안됨
아예 다 지우고 다시 해봤는데도 gcc main.c 를 쳐도 오류만 뜹니다. shell창이 저는 cmd로 되어있는 것과는 관련이 없을까요? F1을 쳐서 shell을 쳐보았는데 강의에 나오는 것처럼 shell 종류를 바꿀 수 있는 것이 저는 뜨지 않더라고요. 전에 파이썬 배울 때 설정해 두었던 것이라서 어떻게 했는지 잘 기억이 안나요. 저것도 powershell로 바꾸는 방법도 알려주시면 감사할 것 같습니다.
- 미해결홍정모의 따라하며 배우는 C언어
1.13 비주얼 스튜디오 코드의 기본적인 사용 방법 5분 48초쯤
선생님 따라서 .\a.exe를 쳤는데 왜 오류가 뜨는건지 모르겠어요
- 미해결홍정모의 따라하며 배우는 C언어
1.11 명령 프롬포트의 기본적인 사용법 2분 42초쯤
선생님이 보여주신 명령 프롬포트 화면이랑 제 노트북에 뜨는거랑 달라서요. explorer를 어디다가 붙여야 하는지 모르겠습니다.. 알려주세요
- 미해결홍정모의 따라하며 배우는 C언어
arr2d[2][4] 질문 있습니다
float arr2d[2][4]; 가 있을 때 arr2d의 사이즈 자체는 32바이트이지만 arr2d는 메모리공간은 없는 float 4개짜리 배열의 포인터잖아요.제가 잘못 배운 게 아니라면 뭔가 괴리감이 크게 느껴집니다. 그냥 받아들일까요?
- 미해결홍정모의 따라하며 배우는 C언어
13.1 파일 입출력의 작동원리 파일스트림
파일 스트림도 버퍼를 사용하는 스트림이라는 말씀이신가요?
- 해결됨홍정모의 따라하며 배우는 C언어
mingw-w64 설치 오류
아무리 여러 개를 시도해봐도 설치가 안됩니다ㅜㅜ mingw-w64 설치하는 해결방법이 있을까요? 현재 링크에 들어가면 강의에 나온 방법과 약간 달라진 것 같아요.
- 미해결홍정모의 따라하며 배우는 C언어
stdio.h를 include하지 않아도 printf가 실행되는 이유
main.c에서도, my_print_functions.h에서도stdio.h를 include하지않았는데왜 printf("Hello!!hi!!bye!!")가 출력되는걸까요??감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
9-8. factorial 예제
제가 factorial 예제를 제대로 이해했는지 몰라서 질문드립니다. #define CRTSECURE_NO_WARNINGS#include <stdio.h> long loop_factorial(int n);long recursive_factorial(int n); int main(){ int num = 5; printf("%d\n", loop_factorial(num)); printf("%d\n", recursive_factorial(num)); return 0;} // (1) 반복문 factoriallong loop_factorial(int n){ long ans; for (ans = 1; n > 1; n--) ans *= n; return ans;} // (2) 재귀 호출 factoriallong recursive_factorial(int n){ if (n > 0) return n * recursive_factorial(n - 1); else return 1;} 해당 예시 코드에서 (2)번 재귀 호출 factorial 예제 과정에 대해 설명해보겠습니다. (1)처음 n에 argument 5가 대입되면, 0보다 큰 조건을 충족하므로 5 * recursive_fatorial(4)가 반환됩니다.(2)이후 recursive_factorial(4)가 실행되고, 역시 0보다 큰 조건을 충족하므로 4 * recursive_factorial(3)이 반환됩니다.(3)이 과정 끝에 recursive_factorial(0)은 조건을 충족하지 못해 1을 반환합니다.(4)그렇게 마지막에 반환된 recursive_factorial(0)부터 다시 역순으로 값이 반환됩니다.(5)1(f(0)) >> 1 * 1(f(0)) >> 2 * 1(f(1)) >> 3 * 2(f(2)) > > 4 * 6(f(3)) >> 5 * 24(f(4)) >> 120(f(5)) 의 순으로 값이 반환되어 결국 main() 함수에서 recursive_factorial(5)의 값은 120이 출력됩니다.늘 친절한 답변 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
4.9 질문 있습니다.
printf("%hhd %f", i, f); int i = 300; f=21.753241f라 했을 때 인자가 stack에 복사될 때 %f 부분은 왜 정상적으로 출력이 될까요? stack에 복사될 때 애초에 1바이트로 짤려서 복사가 되는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
9-7. 재귀 호출과 스택 각 변수 주소 값 크기 차이 질문
안녕하세요.선생님께서 강의 후반부에서 실제로 stack에 쌓이는 것은 변수 뿐만 아니라 함수를 실행하기 위해 필요한 데이터들도 있다고 말씀하셨습니다.이때 int 자료형 크기 이상(4 byte)의 차이를 보인다고 말씀하셨는데, 이 차이는 각 주소 값들을 비교한 것인가요?그게 맞다면 제 출력값 기준으로 각 주소값들은 256의(10진수 기준) 차이를 보이던데, 이것은 1byte정도의 크기가 아닌가요?늘 친절한 답변 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
C언어로 메모장 프로젝트를 시작한다면,
지금 강의 커리큘럼을 완주했을때, 메모장 프로젝트가 가능할까요?제가 생각한 메모장 기능은파일 열기, 닫기,최대화 최소화, 크기변화 텍스트입력, 삭제. 복사,붙여넣기저장,수정-이렇게 일때, 해당 과정만으로 가능할까요?아니면 winAPI나 GUI에 대한 추가 학습이 필요할까요?순수C언어만으로 프로젝트가 가능한지, 다른 별도 학습이 필요한지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
배열 매개변수 길이 관련 c++
17:30 분쯤C++ 에서 배열과 배열의 길이를 압축(간단히, 묶어서)해서 넘기는 방법이 있다고 하셨는데 그게 무엇인가요?
- 미해결홍정모의 따라하며 배우는 C언어
디버깅 창이 사라졌습니다.
왼쪽 하단에 Autos 창이랑, Call Stack 창이 사라졌습니다.. 혹시 어떻게 다시 살리나요?