월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
주소값 출력과 관련하여 질문있습니다
int *a_ptr = &a; 1.printf(" %p\n", *a_ptr); 2.printf(" %p\n", &a_ptr); 3.printf(" %p\n", a_ptr); 여기서 2번은 a_ptr의 주소값을 출력하는 거고 3번은 a의 주소값을 출력해주는 건데 1번을 뭘 출력해주는 건지 궁금합니다. 실제로 확인해보니 모두 다른 값이 나와서요. 1번과 2번이 같은 값이 나올 줄 알았는데 다른 값이 나오네요.
- 미해결홍정모의 따라하며 배우는 C언어
dereferenced 이중포인터의 연산에 질문
void prointIntArray(double** arr, int n) { for (int i = 0; i < n; ++i) printf("%p \n", *arr + i); printf("\n"); } int main() { double* arr_i[] = { (double[]) { 0,1,2,3 }, (double[]) { 4,5,6,7,8 }, (double[]) { 9,10,11 } }; int n_i = sizeof(arr_i) / sizeof(arr_i[0]); prointIntArray(arr_i, n_i); return 0; } /* Output 006FFA34 // (double) 크기만큼 이동함을 확인할 수 있습니다. 006FFA3C // arr은 이중포인터니 *arr도 포인터 아닌가요? 006FFA44 // 이 값은 포인터 크기만큼 움직여야 할 것 같습니다. */ void printStrLiteral(char** arr, int n) { for (int i = 0; i < n; ++i) printf("%p \n", *arr + i ); printf("\n"); } int main() { char* arr[] = { "Cherry", "AppleBee", "Pineappple", "Apple", "Orange" }; int n = sizeof(arr) / sizeof(arr[0]); printStrLiteral(arr, 5); } /* Output 00AC7E40 // 이중포인터를 dereference하여도 여전히 포인터입니다. 00AC7E41 // 포인터 + 1 연산을 했을 때 4byte를 이동해야할 것 같습니다. 00AC7E42 // base type 만큼 움직이고 있습니다. 00AC7E43 00AC7E44 */ 이중 포인터를 derefrence해도 pointer입니다. pointer 크기만큼 이동해야할 거 같은데 base type 크기만큼 이동하는 이유가 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
getchar
while (getchar() != '\n') continue; 이게 어떻게 첫 글자만 읽는다는 의미인지 모르겠습니다 ㅠ
- 미해결홍정모의 따라하며 배우는 C언어
컴파일과 빌드에 대해 질문있습니다.
안녕하세요. 앞에 있는 컴파일러 강좌를 다시 듣고와도 잘 모르겠는 부분이 있어서 질문 드립니다. 소스파일 하나당 obj파일이 하나 만들어지니까 함수의 본체를 없앤 소스코드를 빌드 할 때도 obj파일이 하나, 함수의 본체가 제대로 있는 소스 코드를 빌드 할 때도 obj 파일이 하나 만들어지잖아요. 이 때 본체를 없앤 소스코드를 빌드할 때 링킹 단계에서 오류가 난다는 건 obj 파일에 본체가 없다는 걸 링킹 단계에서 안다는 걸로 이해하는 게 맞을까요? 그러니까 링킹 단계에서 쓰여진 함수들의 참조를 가져오려고 라이브러리 파일도 가져오고 하는데 여기서는 print_multiple_chars라는 함수의 참조를 가져올 수 없어서 오류가 발생한다고 이해하는 게 맞을까요? 그러면 컴파일 할 때는 로직만 보고 신경안쓰고 obj파일을 만들었더라도 함수의 본체가 제대로 있는 소스코드를 빌드할 때 본체가 다른 obj파일에 있는 게 아니라 컴파일 할 때 만들어진 obj파일에 있는 게 맞는 거죠? 읽어주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
1:00 알파벳 예제 직접 풀어봤는데 의문점이 있습니다.
int main() { int i = 'A'; int m = 1; int n = 0; for (; m <= 5 ; m++) { for (; n <= 10 ; n++) { printf("%c ", i + n); } printf("\n"); } return 0; } 답안을 보기 전에 임의로 만들어 보았습니다. 좀 더럽게 만들긴 했는데 A ~ K까지 첫 줄은 잘 출력이 되는데 2 ~ 5열까지는 출력이 되지가 않았습니다. 두번째 루프는 작동을 하는데 첫번째 루프가 작동하질 않습니다. 첫번째 루프를 답안과 비교를 해봐도 제가 만든 첫번째 루프에서 어디가 문제인지를 모르겠습니다. 어디에서 문제가 생긴걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
printf의 반환값
scanf 함수는 입력된 수에 따라 반환값이 결정되는 것으로 알고 있습니다. printf 함수의 반환값은 무었인가요?
- 미해결홍정모의 따라하며 배우는 C언어
64bit 환경에서 stack 에 대한 질문 보고 다시 질문드립니다.
안녕하세요, 저 역시 x64 환경이어서 이번 강의 질문 내용에서 바로 아래에 다른 분이 올려주신 질문과 상세한 답변 감사하게 보았습니다. 거기서 생긴 다른 의문이 있는데요, 64-bit환경에서는 8byte씩 읽는 것이라면,int나 long과 같은 4byte 크기의 자료형도 실제로는 8byte를 차지하고 있는 것인가요??기본값이 8byte일 때 그보다 적은 크기만 따로 떼어내어 읽는 것이 가능한지 질문드립니다. 감사합니다..!
- 미해결홍정모의 따라하며 배우는 C언어
%lld 질문드립니다.
안녕하세요, 저는 맥북으로 vscode를 사용하여 코딩 중에 있습니다. 강의에 보면 %lld 형식지정자를 사용할 때, INT_MAX + 1을 사용하여 값을 받도록 하는데요, 저같은 경우 INT_MAX + 1이라고 넣으면 overflow가 발생하고 INT_MAX + 1LL이라고 반드시 입력을 해줘야지만 제대로 된 값이 출력됩니다. 보통 의문점이 생기면 구글링 통해서 해결하곤 하는데 이건 어떻게 검색해야 할지 감이 안 잡히네요 ㅜㅜ 아무리 생각해봐도 왜 이런 문제가 발생하는지 잘 모르겠습니다. ------------------------------------------------- 좀더 살펴보았는데요,,, problems에 경고문이 뜨네요. "format specifies type 'long long' but the argument has type 'int'" 그니까, argument 부분에서 이미 overflow가 발생했기 때문에 값이 -2147483648로 받아지는 것 같아요.그런데 이 경고문을 바탕으로 보았을 때는 강의 예시에서는 어떻게 overflow가 발생하지 않을 수 있는지 궁금합니다... go to definition에서 보면 강의에 있는 limit.h 라이브러리가 제 것과 다른데, 그 문제일 수도 있겠다 싶긴 한데요... 제 라이브러리에서는 INT_MAX가 int로 되어있고 선생님께서 사용하시는 라이브러리에는 long long으로 되어 있다든지.. 교수님의 라이브러리에는 #define처리가 되어 있었던 것 같은데 저는 그렇게 안 되어 있거든요. 이게 좀 실마리가 될 수 있을지 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
실무에서 맥북으로 c++,c 에디터 뭐쓰는게 좋나요?
선생님께서는 비쥬얼스튜디오가 제일 좋다고 그랬는데 저는 처음에 공부목적으로 비쥬얼코드로 GCC컴파일러로 공부를 했었는데 이제 맥북을 사용하게되서 비쥬얼스튜디오를 쓸수가없어요 에디터로 VIM 이랑 비쥬얼스튜디오 코드 이렇게 생각했었는데 vim은 사용하기도어렵고 몇가지 단점이있다그랬던거같아요 c++로 콘솔게임 개발을 위해서 맥북에서는 어떤 에디터를 사용하는게 제일 나을까요? 이문제로 많이 알아보고 고민했는데 해결이안됬어요
- 미해결홍정모의 따라하며 배우는 C언어
Build 오류
위 강의와 동일하게 코딩한 후 x86에서 build하면 아래와 같은 문구가 뜨면서 build가 되지 않습니다. Unable to start program 'c:\users\...' c:\users\... is not a valid Win32 application. x64에서는 정상적으로 빌드가 됩니다. 어떤 오류인지 알려주실 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
자료형 질문있습니다.
강의에서 input의 자료형으로 long을 사용하셨는데 int와 long의 데이터 범위가 같은 것으로 알고있는데 혹시 차이가 있나요? (signed)long(int)로 알고 있는데 제가 잘못 알고 있는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
8.5강 2:58초가 잘 이해되지 않습니다.
버퍼에 \n이 남아있는 거는 이해가 됩니다. 그런데 그렇기 때문에 다음 입력 받을 때 %c에 \n이 입력 되는데 그러면 프로그램이 종료되어야 한다고 생각이 들어서요. 실제로 제가 선생님과 똑같이 쓴 코드로 실행시키면 c == \n이 되어 프로그램이 종료됩니다. 그런데 강의에서는 b 1 2를 입력했을 때 \n이 여러번 반복된 후에 제대로 실행이 되더라고요. 그렇게 되는 이유를 잘 모르겠습니다. ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
항상 값이 0 이 나옵니다.
아래 작성한 코드입니다. 환율 변수명 rate로 초기화 하고 그곳에 1500을 넣었습니다. 그리고 won 입력후 rate와 won을 곱하였는데 항상 "0"이 나옵니다. 교수님 도와주세요. (혼자 디버거를 찍어 보아도 won이라는 변수에 값이 입력되질 않습니다.) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int won = 0; int dollar = 0; int rate = 0; rate = 1500; printf("Input won\n"); scanf("won is %d\n", &won); dollar = won * rate; printf("Dollar is %d\n", dollar); return 0; }
- 해결됨홍정모의 따라하며 배우는 C언어
dummy 유무의 차이가 뭔지 모르겠습니다
안녕하세요. 디버깅할 때 10:23 설명과 달리 dummy가 있을 때도 dummy에서 멈추지 않고 넘어가서 결국 같은 결과인 걸로 보입니다. 뭐가 다른 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
7.11 예제 질문
평균은 나오는데 최소값, 최대값 함수를 작동하는 과정에서 num 값이 변하는데 무슨 이유일까요? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <ctype.h> #include <stdbool.h> double min(num, pre_num) { return pre_num >= num ? num : pre_num; } double max(num, pre_num) { return pre_num >= num ? pre_num : num; } int main(void) { double average = 0.0; double sum = 0.0; double pre_num = 0.0; double max_num = 0.0; double min_num = 0.0; double i = 0.0; double num = 0.0; bool consider_num = 1; while (true) { consider_num = scanf("%lf", &num); if (consider_num == 0) break; if (i >= 1) { max_num = max(num, pre_num); min_num = min(num, pre_num); } sum += num; pre_num = num; i += 1.0; } average = sum / i; printf("%lf, %lf, %lf", average, min_num, max_num); return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
변수에 값을 할당하기 전에 컴퓨터는 어떻게 계산을 하나요?
char ch; scanf("%hhd", &ch); printf("%i", ch); Overflow에 관한 질문이 있습니다. char 데이터는 -128 ~ 127까지 값을 사용할 수 있습니다. 이때 128 값을 할당하면 -128로 overflow 129 값을 할당하면 -127로 overflow 130 값을 할당하면 -126로 overflow가 됨이 신기했습니다. 왜냐하면 overflow된 값을 보간법으로 처리하는 방법을 모르기 때문에 출력값을 기준으로 컴퓨터가 어떻게 동작하고 있는지 추측해봐야 했습니다. binary 계산으로 보면 컴퓨터는 단순히 1을 계속하여 더하고 있을 뿐입니다. 부호| 값 0 | 111 1111 = 127 <= 127 1 | 000 0000 = -128 <= 128 1 | 000 0001 = -127 <= 129 1 | 000 0010 = -126 <= 130 질문입니다. 1) 그렇다면 컴퓨터가 int 타입의 16이란 숫자를 저장할 때도 0부터 계속해서 1을 더하여 16을 구하는 건가요? 컴퓨터가 데이터를 저장하기 전 계산하는 과정이 궁금해졌습니다! 2) int 타입은 그렇다고하면 float나 double같은 경우는 exponent와 fraction이 각각 나누어져 있기 때문에 실제 값을 계산하고 할당할 때 상당히 복잡한 과정이 있을 것 같습니다. 교수님이 알려주셔서 각 파트를 어떻게 계산하는지는 알고 있으나 컴퓨터가 이 과정을 어떻게 계산하고 처리하는지는 막상 상상이 되지 않습니다. c 언어가 상당히 저수준의 언어라고 생각해서 배우면 컴퓨터를 잘 이해할 수 있을 거 같았는데 뭔가 더 깊은게 많을 거 같네요 ㅠㅠ 도와주세여
- 해결됨홍정모의 따라하며 배우는 C언어
10:13 호출되는 함수 변수의 메모리할당 시점 질문입니다
10:13 호출되는 함수 변수의 메모리할당 시점 질문입니다 void func() { int l_arr[MAX] = { 0, }; } int l_arr[MAX] 가 컴파일 할때 할당되는건가요?문득 전에 main 이외에 함수들을 정의는 안한채로 선언만할수 있고그렇게하면 컴파일러에서는 에러는 안내지만 링킹할때 문제 생긴다고 하셨던게 떠 올라서이미 정의까지 되어있는 함수에 대해서는 메모리에 할당되는 시점이 컴파일 할때라고 이해하면 괜찮을까요?
- 미해결홍정모의 따라하며 배우는 C언어
11.6 강 strcat() 구현 중 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요, 11.6강 strcat() 함수 구현 중 질문드립니다. char * strcat_ptr(char* dest, const char* src) // strcat 구현하기 { char* temp = dest; // temp 포인터 주소를 dest 로 while (*temp) // temp가 가르키는 문자가 null 일때까지 반복 *질문사항 : *temp 를 *dest 로 바꾸면 무한루프가 되더라구요..ㅠㅠ 왜 그런지 모르겠어요.. { temp++; // temp 주소 하나씩 증가 } while (*src) // src가 가르키는 문자가 null 일때까지 반복 { *temp++ = *src++; // temp가 가르키는 주소에 src가 가르키는 문자로 변경 } temp = 0x00; // temp를 null 로 해줌. return dest; //dest 반환 }
- 미해결홍정모의 따라하며 배우는 C언어
컨트롤버스의 데이터이동방향
안녕하세요. 메모리는 address데이터를 받기만하고, Cpu는 보내기만하는것으로 알고있습니다. 따라서 8:40의 그림은 문제없어보입니다.(화살표 방향에대해) 그런데 제생각에는 control데이터도 메모리는 받기만하고 cpu는 보내기만 할것으로 생각되는데요. 그림의 화살표방향이 수정되어야 하는것 아니가 생각됩니다!!
- 미해결홍정모의 따라하며 배우는 C언어
교수님 도움을 요청합니다. 실행에 오류가 납니다.
#define _CRT_SECURE_NO_WARNISGS #include <stdio.h> #include <stdbool.h> int main() { //int temp; //temp = true ? 1024 : 7; // ternary //printf("%d\n", temp); //temp = false ? 1024 : 7; //printf("%d\n", temp); //int a = 1, b = 2; //int max = (a > b) ? a : b; int number; scanf("%d", &number); <-아래 오류줄이 생기면서 실생이 안됩니다. bool is_even; is_even = (number % 2 == 0) ? true : false; //if (number % 2 == 0) // is_even = true; //else // is_even = false; //bool is_even = (number % 2 == 0) ? printf("Even") : printf("Odd"); if (is_even) printf("even"); else printf("odd"); return 0; }