월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
10.16 다차원 배열을 함수에게 전달해주는 방법
강의 시간 6:20부터 #define ROWS 3 #define COLS 4 int sum2d_1(int ar[ROWS][COLS]); "ROWS를 넣어주더라도 내부적으로는 사용할 수 없고,이 정보는 정의하는 함수로 전달이 안된다.근데 배열을 선언할때 symbolic constant를 사용하는 경우가 대부분 그래서 이걸(ROWS) 이용해서 밑에서 접근할 수 있다." 여기서 밑에서 접근할 수 있다는 말이 int main() { int data[ROWS][COLS] = { {1,2,3,4}, {5,6,7,8}, {9,0,1,2} }; printf("%d\n", sum2d_1(data)); return 0; } int sum2d_1(int ar[ROWS][COLS]) { int r, c, tot = 0; for (r = 0; r < ROWS; r++) for (c = 0; c < COLS; c++) tot += ar[r][c]; return tot; }for문에 있는 ROWS가 위에서 define으로 이미 정의되어 있기 때문에 사용할 수 있다는 말인가요??
- 해결됨홍정모의 따라하며 배우는 C언어
double 일때 절삭
double d = 3.14159265358979323846264printf("%f %f %lf\n", 3.141592f, d, d);컴파일 하면 3.141592 3.141593 3.141593으로 나오는데 그 이유가 무엇인가요..?왜 저 뒤에가 3이 된건가요?
- 미해결홍정모의 따라하며 배우는 C언어
부록 무료 이벤트는 끝난건가요?
관련 링크가 사라졌던데 이제는 끝난건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
printf의 return value에 대해
printf가 문자열의 길이를 return 한다면 문자열을 다룰 때 한정으로 strlen 함수와 같은 값을 반환하는 걸까요?
- 해결됨홍정모의 따라하며 배우는 C언어
0.8 CPU가 일하는 방법 수업 관련 질문
명령어가 명령어 레지스터로 넘어간다고 하셨는데명령어랑 메모리랑 같은건가요? 0.8 CPU가 일하는 방법 10:56
- 해결됨홍정모의 따라하며 배우는 C언어
4-10 * modifier 질문!
마지막 예시로 * modifier가 scanf 함수에 어떻게 적용되는지 설명하셨는데, *이 scanf 에서 쓰이면 이것과 결합된 형식 지정자는 무시되는 건가요??
- 해결됨홍정모의 따라하며 배우는 C언어
코딩 중 발생하는 warning에 대해서
visual stduio로 코딩 후 컴파일을 하면 대체로 "No issues found"가 표시되기도 하지만, 노란색으로 warning이 뜨기도 해요.혹시 이렇게 뜨는 warning은 모두 필수적으로 제거해야 하나요?
- 해결됨홍정모의 따라하며 배우는 C언어
5-2, 초기화와 대
안녕하세요. 강의를 듣던 중 'const int TWO = 2;' 코드가 대입이 아니라 초기화라고 설명하셨습니다.대입과 초기화의 차이가 헷갈립니다.초기화란 처음 어떤 변수에 값을 넣는 과정을 말하는 걸까요?그럼 초기화는 일종의 대입이 아닌가요?
- 미해결홍정모의 따라하며 배우는 C언어
14.4 문자열을 받는 함수
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #define MAX_TITLE 40 #define MAX_AUTHOR 40 #define MAX_BOOKS 3 /* maximum number of books */ char* s_gets(char* st, int n) { char* ret_val; char* find; ret_val = fgets(st, n, stdin); // vs. scanf() if (ret_val) { find = strchr(st, '\n'); // look for newline if (find) // if the address is not NULL *find = '\0'; // place a null character there else while (getchar() != '\n') continue; // dispose of rest of line } return ret_val; } struct book { char title[MAX_TITLE]; char author[MAX_AUTHOR]; float price; }; int main() { struct book library[MAX_BOOKS] = { {"Empty", "Empty", 0.0f}, }; /* array of book structures */ int count = 0; while (1) { printf("Input a book title or press [Enter] to stop.\n>>"); if (s_gets(library[count].title, MAX_TITLE) == NULL) break; if (library[count].title[0] == '\0') break; printf("Input the author.\n>>"); s_gets(library[count].author, MAX_AUTHOR); printf("Input the price.\n>>"); int flag = scanf("%f", &library[count].price); while (getchar() != '\n') continue; count++; if (count == MAX_BOOKS) { printf("No more books.\n"); break; } } if (count > 0) { printf("\nThe list of books:\n"); for (int index = 0; index < count; index++) printf("\"%s\" written by %s: $%.1f\n", library[index].title, library[index].author, library[index].price); } else printf("No books to show.\n"); return 0; }안녕하세요, 해당 코드에서 구조체에 대한 부분은 아니지만 궁금증이 생겨 질문 남깁니다.문자열을 받아 구조체의 문자열 멤버에 넣는 사용자 정의함수 s_gets()에 대한 질문인데요,해당 예제에서는 s_gets()의 arguments로 title, author 등의 배열 형태가 들어가는데, 사실 함수 안에서는 배열이 포인터로 decay된다고 알고 있습니다.그렇게 된다면 함수 안에서는 문자열을 다룰 때 read-only가 되어 변경할 수 없게 되는 것 아닐까요? 그런데 해당 코드의 s_gets()함수에서는 '\n'을 찾아 '\0'으로 바꾸고 있어서 살짝 헷갈립니다.argument인 library.title, library.author 등이 본체는 배열이기 때문에 문제가 없는 걸까요?
- 해결됨홍정모의 따라하며 배우는 C언어
3-9, 고정 너비 정수형 질문
안녕하세요 강의를 복습하며 헷갈리는 점이 있어 질문드립니다.고정 너비 정수형은 시스템이 다른 운영체제에서도 코드가 정상적으로 작동할 수 있도록 정수 자료형의 크기를 미리 지정한 정수형으로 이해했습니다. 이러한 정의가 맞을까요?printf 함수에서 고정 너비 정수형으로 선언된 변수(i32)의 형식지정자를 쓸 때 예시를 보며 살짝 헷갈리는 점이 생겼습니다.예시에서 3가지 경우를 교수님께서 보여주셨는데, 전부 출력이 동일하게 나왔습니다.만약 int type을 2바이트로 인식하는 시스템에 예제의 코드를 사용하면 메크로를 쓰지 않은 첫 번째, 두 번째 예시는 오류가 발생하는 건가요? 맞다면 sigend int 형식 변환자에 속하는 %d와 32비트로 고정된 변수 i32의 크기가 서로 맞지 않아서 일까요? 아직 이해가 부족해서 용어들이 적절히 쓰였는지 모르겠습니다.답변 감사합니다~!
- 해결됨홍정모의 따라하며 배우는 C언어
4-4 Extra 예시 오류
안녕하세요. 교수님과 똑같이 코드를 쳤는데 에러가 발생했습니다.인터넷을 검색해도 무슨 말인지 잘 모르겠어서 질문 드립니다. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
8.9 강의 파일 위치에 대해 여쭙니다.
vcxproj도 있는 상황에서 파일 리드에 실패합니다. 이럴 경우 어떻게 해야하나요?
- 미해결홍정모의 따라하며 배우는 C언어
7.2 int ch일 때의 getchar()와 putchar()
int ch; ch = getchar(); putchar(ch);위 코드에서 getchar()은 int타입이니까 a를 입력하면 a의 아스키코드 97을 ch에 넣어서 ch의 값은 97을 얻게 되고, putchar(ch); 역시 int타입이니까 97을 출력할 줄 알았는데 그대로 a가 출력 되는 이유는 무엇인가요?
- 해결됨홍정모의 따라하며 배우는 C언어
따배씨 4-2 sizeof 연산자 질문
안녕하세요. 강의 듣고 궁금한 것이 있어 질문 드립니다. 1번째 예시에서 size_t에 마우스를 갖다 대보니까 영상과 다른 값이 나타납니다. 왜 저는 선생님처럼 'int'가 아니라 'long long'으로 표시될까요? 2번째 예시에서 8바이트가 출력됩니다. 이유를 알고 싶습니다.
- 해결됨홍정모의 따라하며 배우는 C언어
12.16 강의 realloc() 함수 질문입니다.
12.16 강의 realloc() 함수 질문입니다.int n = 10;int* ptr = (int*)calloc(n , siezof(int));n = 20;int* ptr2 = (int*)realloc(ptr, n * sizeof(int)); 위와 같이 realloc() 함수를 이용해 메모리를 할당받으면 자동으로 calloc으로 할당 받은 메모리는 할당이 해제 되는 건가요?디버거 이용해서 보면 프로그램이 끝날 때 까지 calloc으로 할당받는 메모리는 해제가 되지 않고 메모리 누수가 발생하는거 같은데 해제가 되지 않는게 맞나요?
- 미해결홍정모의 따라하며 배우는 C언어
2차원 배열에서 arr[0]+1 과 &arr[0]+1 의 차이
#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} }; printf("%f, %f\n", *(arr2d[0] + 1), **(&arr2d[0] + 1)); printf("%llu, %llu", (unsigned long long)(arr2d[0] + 1), (unsigned long long) ( & arr2d[0] + 1)); // 12 차이 }위의 예제에서 arr2d[0]+1은 arr2d[0][1]의 주소이고, &arr2d[0]+1은 arr2d[1][0]의 주소라고 나오는데요그냥 c언어의 문법이 그런 것인지, 아니면 어떤 이유가 있는 것인지가 궁금합니다.또한, 위의 예제에서 [0][1]번째의 값인 2.0과 [1][0]번째의 값인 5.0을 출력하고자 할때, 후자의 경우에만 indirection을 두번 해줘야 하는 이유가 알고 싶습니다.
- 미해결홍정모의 따라하며 배우는 C언어
포인터를 배열처럼 사용
안녕하세요! 포인터를 배열처럼 사용하는 원리가 이해가 가지 않아 문의 드립니다. 아래의 스크린샷을 봐주시면 감사하겠습니다!!double* pd = arr2;는 포인터 변수 pd에 arr2[0]의 주소 즉, &arr2[0]을 넣어주는 것이라고 생각합니다. 그래서 pd로 pd가 가지고 있는 주소값으로 그 주소가 가리키는 공간에 접근해 *pd = 3.0처럼 arr2[0] 공간의 값을 수정해주는 것은 이해가 갑니다. 하지만 pd[2] = 1024와 같이 포인터에 배열을 쓰는 것이 이해가 가지 않습니다. pd 자체는 포인터 변수이며 단순히 &arr2[0]을 가지고 있을 뿐인데 어떻게 pd 자체가 arr2처럼 배열로 동일시가 되나요?? pd[2]는 pd+2와 같은 역할을 하는 것인가요? 만약 그렇다면 arr2[0]이라는 주소값에 포인터 연산을 해 2만큼의 인덱스를 이동해 arr2[2]에 도달했다고 봐도 되나요??
- 미해결홍정모의 따라하며 배우는 C언어
포인터 2차원 배열
안녕하세요 포인터 2차원 배열 9분 대부터 다시 공부하다가 이해가 가지 않아 문의드립니다.위의 코드에서 *(*(parr + j) + i));와 (parr[j] + i);가 헷갈립니다. 일단 제가 처음에 이해한 대로 설명드려보겠습니다. parr은 parr[0]을 가리키는 포인터이며 즉 이 포인터가 최종적으로 가리키는 공간은 &arr0[0] 즉 arr 배열의 첫번째 공간입니다. 이 상태에서 예를 들어 parr + 1을 하면 &arr0[1]로 이동하며 를 하면 그 값은 2 이런 식이라고 생각했습니다. 또한 parr[1] + 1에서 parr[1]은 포인터이며 이 포인터가 가리키는 공간은 &arr1[0]이며 이 상태에서 포인터 연산 +1을 해주면 &arr1[1]이고 이를 로 접근하면 그 값은 5로 이해했습니다. 그치만 실제 결과를 보면 위에서 제가 제시한 두 코드의 결과는 같아야 되더군요. 그렇다면 그 결과를 도출하기 위해 다시 *(*(parr + j) + i));를 설명드리겠습니다. parr 배열 이름 자체는 &parr[0]이며 이 상태에서 포인터 연산 + 1을 하면 &parr[0] = &arr0[0], &parr[0] + 1 = &arr0[1]이 아니라 &parr[0] + 1 = &parr[1]이며 이 상태에서 로 접근하면 그 값은 4, 4+1은 5이며 이를 *로 간접 접근하면..이런 식인데 어디부터 제 개념이해가 잘못됐는지 모르겠습니다.. parr[1]로 먼저 arr1[0]에 접근한 뒤 포인터 연산 +1을 하는 것과 parr 자체에서 포인터 연산 +1을 하면 결과가 정확히 어떻게 다르며 *(*(parr + j) + i)) 이 코드의 정확한 개념이 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
2.8 키워드와 예약어 질문
안녕하세요. 강의를 듣고 키워드와 예약어 개념이 조금 헷갈려서 질문 드립니다.키워드는 문법을 구분하기 위해 사용되는 단어이고, 예약어는 말 그대로 프로그래밍 언어가 문법에 사용하려고 예약해둔 단어들로 알고 있습니다.그렇다면 헤더가 없어도 문법적으로 사용되는 단어들은 키워드에 포함되고, 헤더가 없으면 변수 혹은 함수의 이름으로 쓸 수 있으나 include 하는 순간 이름으로 쓸 수 없는 단어들을 예약어로 보는 건가요? 아니면 전자, 후자 모두 키워드이자 예약어인지 궁금합니다. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
강의자료 질문
혹시 ppt 강의자료는 따로 제공받을 수 없나요??