월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
scanf 입력 질문드립니다
int c = 'A'; printf("%c", c); printf("%d",c); 위 printf 문 실행 결과로 'A'와 65가 정상적으로 출력됩니다. 그러나, scanf("%c",&c); 로 입력을 받으면 제 생각에는 A를 입력하면 %c 가 A를 받고, 이는 내부적을 65의 형태로 저장이 되어 변수 c에 65를 저장하고, 작은 char 자료형을 큰 int 자료형에 담았으니 문제가 없을거라 생각했습니다. 혹은 scanf("%d",&c); 로 입력을 받았을 때, 'A'가 %d를 만나 65로 바뀌어서 c 에 저장될 것이라고 생각했고, 위 두가지 경우 모두 printf 문의 형식지정자에 따라 65 혹은 'A' 로 다시 출력할 것으로 예상하였는데 전혀 다른 값이 출력되고 있습니다. 잘못된 이해가 있다면 바로잡아주시면 학습에 도움이 될 것 같습니다. 감사합니다!
- 미해결홍정모의 따라하며 배우는 C언어
마지막 예제 질문있습니다!!
안녕하세요 홍정모 교수님!! 질문이 있어서 여쭤봅니다. #define SIZE 5 int main() { int my_arr[SIZE]; int sum = 0; printf("Enter 5 numbers : "); for (int i = 0; i < SIZE; ++i) { scanf("%d", &my_arr[i]); sum += my_arr[i]; } printf("Sum = %d", sum); return 0; } 제가 구현한 코드입니다. 불드친 부분을 제가 my_arr 로 했을때는 sum의 값이 이상하게 출력이 되는데, 그 이유를 알고 싶습니다!! 강의에서는 &my_arr[i]와 my_arr를 같이 써도 무방하다고 하셨다고 제가 이해를 했습니다만, 어디가 어떻게 잘못되었는지 궁금합니다. 항상 좋은 강의 감사드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
differs in levels of indirection 에러에 관한 문의입니다.
현재 챕터 10까지 다봤는데도 포인터가 잘 이해가 안되서 9강 터 다시 복습중입니다. 이번 강의에서 교수님이 설명해주시는 부분은 이해가 가는데요. 강의 19분 31초경에 29번째 줄의 코드를 printf("Avg = %f\n", average(&arr1, 5)); 처럼 쓰면 왜 differs in levels of indirection warning이 뜨는지 잘 이해가 안됩니다. (코드실행은 또 정상적으로 됩니다.....) 본강의의 main 함수에서 printf("%p %p %p", arr1, &arr1, &arr1[0]); 를 실행시켜보면 arr1, &arr1, &arr1[0] 전부다 같은 메모리 주소값을 가지고 있는것을 알 수 있습니다. 그렇다면 함수의 인자로 저 세가지값중 어떤걸 넘겨줘도 상관이 없는거 아닌가요???? 왜 arr1 과 &arr1[0] 은 문제가 없는데 &arr1은 warning이 뜨는걸까요...
- 미해결홍정모의 따라하며 배우는 C언어
int main(int argc, char* argv[]) 에대해서
과 같은 코드의 내용을 전 강의에서 보았던 기억이 있는데 그때 제데로 보지않아서 기억이 가물가물하네요 어디부분인지 모르겠는데 저부분에 대해 배우는 강의가 몇강인가요?
- 미해결홍정모의 따라하며 배우는 C언어
자꾸 전에 했던 파일이 실행됩니다ㅠㅠ
간편하게 프로젝트 생성해서 연습할 때 문제가 생겨요.. 오른쪽에 solution 어쩌고 있는데에 Add눌러서 새 프로젝트 만들고 연습 진행하는데, Ctrl f5 누르면전에 했던 파일이 실행됩니다..
- 미해결홍정모의 따라하며 배우는 C언어
Take snapshot 무한로딩
Take Snapshot을 하면 Heap저장된 메모리가 안뜨고 무한로딩을 합니다. 이거 해결할 수 있는 방법 없나요?
- 미해결홍정모의 따라하며 배우는 C언어
2차원 배열의 주소 관련 질문.
본강의의 코드중 int main() { //int a = 3; //int arr[a]; int data[ROWS][COLS] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 0, 1, 2} }; printf("%d\n", data[2][3]); int* ptr = &data[0][0]; printf("%d\n", *(ptr + 3 + COLS * 2)); return 0; } 위의 코드에서 int* ptr = &data[0][0] 부분이 헷갈리는데요. 교수님이 지난강의에서 설명 하셨던거 처럼 2차원 배열이더라도 결국에 메모리에는 1차원 으로 저장되어있기때문에 data, &data[0], &data[0][0] 3개가 모두 같습니다. 그런데 int* ptr = &data[0]를 하면 output에서 워닝이 발생하고 int* ptr = data도 워닝이 발생합니다. 지난강의를 다시 한번 더 복습했는데도 이해가 잘 안되네요 ㅜㅜㅜㅜㅜ;;;; 지금 포인터에서 계속 막히는데 프로그래밍은 그냥 관두는게 좋을까요? 아무래도 저는 이해가 계속 안되는거 같아서요.
- 미해결홍정모의 따라하며 배우는 C언어
강의 8분 49초경 연산자 순서에 대한 질문이 있습니다.
교수님께서 쓰신 코드의 24번째 줄을 보시면 printf("%u\n", (unsigned)(&arr2d[0] + 1)); 이렇게 되어있는데요. 제가 생각하는게 맞는지 한번만 확인 부탁드립니다. &arr2d[0] + 1 부분을 연산하는 순서는 연산자 우선순위에따라 []가 먼저수행되어 arr2d[0] 이 수행되고 그이후 연산자 우선 순위가 높은것이 & 이므로 &arr2d[0] 이 수행되어 arr2d의 맨첫번째 원소 주소가 되고 그이후 연산자 우선 순위가 높은것이 +이므로 arr2d의 맨첫번째 원소 주소 에 포인터 연산으로 1을 더해서(여기서는 2차원 배열의 형태로 존재하고 각배열에 float 4개가 존재하므로 16바이트가 더해짐) arr2d의 5번째 원소의 주소가 최종적으로 나오게 되는것이 맞는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
10분 30초경의 (*(parr + j))[i] 부분이 잘이해가 안가네요.
교수님 화면의 16번쨰 줄에 위치한 (*(parr + j))[i]부분이 잘이해가 안가네요. 저는 맨 바깥 괄호를 빼서 *(parr + j)[i] 이렇게 써도 분명 작동할거 같은데 실제 실행 시켜보면 오류가 납니다. *(parr + j)[i] 에서 연산자 우선순위를 따지면 []가 가장 높지만 parr+j가 괄호 안에 묶여있으니까 *(parr + j)[i]에서 가장 먼저 실행되는 것은 parr+j 일것입니다. 그러면 그이후 *() 부분이 실행이 되고 *(parr + j) 는 arr0 그리고 arr1이 될 것이며 그이후 [i] 부분이 실행이 될텐데 즉 arr0[0]과 arr1[1] 이될텐데 왜 정상 작동 하지 않을까요? 제가 연산자 우선순위를 잘못 생각하고 있는걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
4:30초경의 설명에 질문있습니다.
교수님께서 " *ptr 이int 기 때문에 이렇게 선언한다고 하셨는데요." 앞에서부터 강의를 계속 복습하면서 들었는데 처음 포인터를 선언하는 방법을 알려주실때는 그냥 int *ptr 처럼 포인터를 선언한다고 만 하셨구 왜 *ptr이 int인지 에대한 부분은 설명을 안해주셨었던거 같습니다. 해당부분에대한 설명을 알려주실수 있을까요? 9.12 강을 다시들어도 잘 설명이 되지 않은거 같습니다. 해당부분이 이해가 되지 않다보니 int (*(*pptr)) = &ptr;로 작동하는 부분도 잘 이해가 안되네요 ㅜㅜ;;;
- 미해결홍정모의 따라하며 배우는 C언어
포인터명과 배열명의 상관관계
안녕하세요 강의를 듣던중 6분 50초 경에서 설명한 부분이 제가 생한 부분과 맞는지 헷갈려서 질문드립니다. 포인터로 선언한 변수에 배열명 또는 배열의 첫번째 주소를 넣어주면 포인터명도 배열을 사용하는 것과 똑같이 사용할수 있는 건가요? 2차원 배열 설명할때 한번 말씀해주신 부분인데 본강의와 같은 단순 1차원 배열에서도 똑같은지 헷갈리네요. 예를들어 double arr2[3] = { 1.0, 2.0, 3.0 }; double* pd = arr2; 이라고 하면 이제 pd[1] = 1.4; 와 같이 "포인터명 + [인덱스]"의 형태로 배열이 사용 가능 한건지요.
- 미해결홍정모의 따라하며 배우는 C언어
포인터 이차배열 질문 드립니다.
교수님 안녕하십니까. c언어의 기본을 다지고자 교수님 강의를 수강하고 있는 사람입니다. 주로 사용하던 언어가 c언어는 아닌지라, 오랜만에 관련 수업을 들으니 뭔가 낯선 느낌이네요. 한가지 질문드리고 싶은 부분은 이차배열과 포인터에 관련된 부분입니다. 예를 들어, #define COL 3 //나머지는 생략하겠습니다. int arr[2][COL] = { {1,2,3}, {4,5,6} }; int(*ptr_test)[COL] = arr; if (ptr_test == ptr_test[0]) printf("same"); 이 부분에서 값을 찍다보니 살짝 의아한 부분이 있습니다. 교수님 강의에도 설명되었듯 기본 배열에서 배열명이 단독으로 쓰일 경우는 포인터와 같은 역할을 하고, 예를 들어, int arr[2] = {1, 2}; 이런 배열이 있다면 arr = &arr[0] 와 같다보니 이와 같은 의문이 들게 되었습니다. 저 위의 코드에서 arr == arr[0] == &arr[0] == &arr[0][0] 이고, ptr_test == ptr_test[0] == &ptr_test[0] == &ptr_test[0][0] 이므로 위의 조건문도 "same"을 잘 찍습니다. 실제로 메모리 주소값 또한 동일한 것은 확인을 했는데 저 부분에서 *ptr_test과 *ptr_test[0] 를 각각 찍어보면 *ptr_test는 다시 메모리 주소값이 나오고, *ptr_test[0]은 arr[0][0]값이 나오는 게 조금 이해가 가지 않습니다. 같은 메모리 주소에서 역참조한 값인데 결과가 다르다는 걸 어떤 식으로 이해하는 게 좋을까요 ? 좋은 강의 만들어주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
지정된 파일을 찾을 수 없습니다
실행시 저런 문구가 뜨는데 어떻게 해결할 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
q to quit
q를 입력해야만 끝나고 다른 문자열을 입력했을때는 안끝나고 싶어서 이리저리 해봣는데... q라고해도 결국 정수113과 q를 컴퓨터는 같은 것으로 인지하기 때문에 실패했습니다. 선생님이 보여준 강의예제에서는 q말고도 다른 문자 즉 int(%d)로는 받을 수 없는 문자를 입력했을 때 어떤 문자든 종료가 되었습니다. %d로 받았기 때문에 문자가 자동으로 정수화가 이루어지지 않는 것 같은데 이것은 'q' 버튼 하나만을 종료로 만들기에는 어려움이 있네요... 만약 받은 것을 불러와서 while문 조건으로 비교 할때 내가 입력한 것을 문자인지 숫자인지 확인이 가능하면 좋겠습니다. 이런방법이 있을까요??그리고 선생님 이전강의에서 형식지정자 %c는 printf 에서는 문자로 출력하고 숫자로출력하려면 %hhd를 이용해야해서 %hhd로 스캔f받아봤지만 이것도 아니네요 ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
강의 11분 18초경 부분이 헷갈립니다.
교수님이 그리신 메모리 그림에서 100, 200, 300, 400 과 같은 주소는 설명을 위해 교수님이 임의로 집어 넣었다는 것이라고 말씀하셨는데요. 11분 18초에서 "첫번째 주소를 여기서 빼버려요" 라고 하고 숫자를 01234567.... 이렇게 바꾸시는데요. 이게 뭘 의미 하는건가요? 그리고 12분경의 "arr이 &arr[0]과 동일하다"라는 부분이 약간 이해가 안되네요. 문법적으로 &arr[0] (arr이라는 배열의 제일 첫번째 값의 주소) 이 그냥 arr이라고 써도 같다고 말씀 하시는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
custom_put함수에서 매개변수 질문
void custom_put(const char* str) { while (*str != '\0') putchar(*str++); } 제가 풀이할때는 putchar(str++); 이렇게 풀었는데 안돼서 이것저것 하다보니까 풀리긴 풀렸는데 putchar(*str); 여기서 putchar함수 괄호 안에는 왜 역참조를 한 값이 들어가나요?
- 미해결홍정모의 따라하며 배우는 C언어
_crtisvalidheappointer(block) 오류에 대해서 궁금합니다.
#include <stdio.h> int main() { int n = 10; int* ptr = NULL; /* malloc */ ptr = (int*)malloc(n * sizeof(int)); n = 20; int* ptr2 = NULL; ptr2 = (int*)realloc(ptr, n * sizeof(int)); printf("ptr을 ptr2로 realloc 후 주소 비교 ptr vs ptr2\n"); printf("%p %p \n", ptr, ptr2); printf("ptr을 ptr로 realloc 후 주소 비교 ptr vs ptr2\n"); ptr = (int*)realloc(ptr, n * sizeof(int)); printf("%p %p \n", ptr, ptr2); } 굵은 줄로 표시된 라인에 접근 시, 위의 사진과 같은 오류가 발생합니다. 재할당된 포인터 ptr에 재접근 하여서 그런 것인가요? 그렇다고 생각이 되어, ptr = (int*)realloc(ptr2,n*sizeof(int)); 로 접근하였는데도, 같은 오류가 발생합니다. 해당 오류의 원인이 무엇인지 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C언어
char 배열의 인덱스 값 질문
int main() { //char* name = ""; // error at RUN-TIME char name[]; int result = scanf("%s", name); return 0; } 위 코드에서 name[]에 인덱스 값을 설정하지 않았습니다 Error (active) E0070 incomplete type is not allowed 라는 오류가 뜨는데 왜 오류가 뜨는지 궁금합니다 꼭 배열의 크기를 설정해줘야 하나요?
- 해결됨홍정모의 따라하며 배우는 C언어
fgets() 함수 null 캐릭터 질문
안녕하세요! s_gets()함수안에서 포인터 find에 입력받은 st 내부의 개행하는곳의 주소를 strchr(st, '\n')으로 저장하여, 조건에 따라 '\n'에 '\0'을 넣는 코드가 있는데, fgets()함수 자체가 입력 완료(개행)되고나면 '\0'을 입력하지 않나요? 아니면 개행된 문자열 맨 마지막에 '\n''\0' 으로 되어있는걸 '\0''\0'으로 바꿔주기 위함인가요? + 몇가지 실험을 해보니, 이름 입력안하고 바로 엔터쳤을 때 break 걸리게 하기 위한 장치이기도 한거같네요.... (두번째 작가이름에서는 엔터쳐도 넘어가는것을 확인하니..)
- 미해결홍정모의 따라하며 배우는 C언어
unsigned int의 literal 자료형 표시 관련 질문입니다.
12:27 쯤 unsigned int ui = 3000000000U 좀 더 앞부분에서는 unsigned int의 literal 뒤에 맞는 자료형(U, LL...)을 붙여야 한다고 많이들 실수를 한다고 말씀하셨는데요. 12:27쯤에는 생략도 가능하다고 하셔서 생략이 가능한 건지, 꼭 써야 하는지 궁금합니다. 감사합니다:)