월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
질문 있습니다
바로 전 질문 8:26에 대해 답변해주신 부분 중 일부 "ar1은 a pointer to [3] int 이자 그냥 int[2][3] 입니다." 와 관련해서 질문을 좀 드립니다. 1. ar1[0][0]은 배열의 요소 값을 나타내고, ar1[0]=&ar1[0][0] a pointer to int ar1=&ar1[0] a pointer to [3] int &ar1 a pointer to [2][3] int 이렇게 정리했는데 맞나요? 2. ar1은 a pointer to [3] int 이자 그냥 int[2][3]입니다 에서 궁금한 점은 ar1이라는 이름이 코드에서 사용했을떄는 a pointer to [3] int 용도로만 사용되는거 맞나요? 그냥 int[2][3]이라는 말은 ar1이 int[2][3]으로 정의되있다는거고 이걸 가리키려면 &ar1을 사용하면 되는거죠? 질문 이해하셨으면 좋겠네요 ㅠ.ㅠ 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
printf 에서는 왜 & 를 사용하지 않는 것인가요?
안녕하세요, scanf 에서는 메모리의 주소에 접근해서 입력값을 넣어줘야 하기 때문에 & 를 사용한다고 하셨는데 그렇다면 printf 에서는 어떻게 & 를 사용하지 않고, 그냥 변수명만 넣어줘도 컴퓨터가 값을 가져올 수 있는 것인가요? 원리가 궁금해서 질문 남겨놓습니다.
- 미해결홍정모의 따라하며 배우는 C언어
#define 질문이요!
삭제된 글입니다
- 해결됨홍정모의 따라하며 배우는 C언어
5:40 질문이요!
#define NUM_DAYS 5 int main(void) { int a = 5; int b[NUM_DAYS]; printf("%d\n", sizeof(a)); printf("%d\n", sizeof(b)); return 0; } 여기서 제가 생각했던것은 a가 int형 이므로 4byte를 가질거라고 생각했고, b도 마찬자기로 int형이므로 4byte를 가질거라고 생각해서 4 4 가 출력될거라고 생각했습니다. 그런데 출력값은 4 20이 나왔습니다. 왜그런건가요? 선생님께서 5:40 쯤에 선생님께선 '타입의크기 곱하기 레터럴상수'를 해주시는데, 그러면 printf("%d\n", sizeof(a)); 이것도 '타입의크기 곱하기 레터럴 상수'로 해줘야되는거 아닌가요? 출력값이 20이 나와야되는것 아닌가요?
- 해결됨홍정모의 따라하며 배우는 C언어
for문 질문드려요!
for (int r = 0; r < 5; ++r) { for (char c = 'A'; c < 75; ++c) printf("%c ", c); printf("\n"); } 를 실행하면 A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J A B C D E F G H I J 이렇게 나오더라고요. 제 생각은 A B C D . . . 이렇게 실행될 거라고 생각했거든요. 저는 안쪽에 있는 for문에서 printf("%c ", c);와 printf("\n");가 순차적으로 실행될거라고 생각했는데, 실제로는 printf("%c ", c);만 반복되고 안쪽에 있는 for문이 끝나야 printf("%c ", c);와 printf("\n");가 순차적으로 실행되더라고요. 왜그런건지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
02:30초 질문드립니다.
02분 30초쯤부터 선생님께서 말씀하시기를 while문 비교를 하기전에 입력을 한번은 꼭 받아야 한다고 하셨는데, int ps = 0; while (ps != 337) { printf("Enter secret code : "); scanf("%d", &ps); } printf("Good!"); 저는 이렇게 while문에 하나만 달랑 넣고 만들어서 실행을 해봤는데 이상이 없더라구요. 이게 정상작동되면 do while문이 필요없지않나요?
- 해결됨홍정모의 따라하며 배우는 C언어
while문 관련 질문입니다.
문득 강의를 보다가 중괄호 없는 코드를 만들어봤는데요. 실행을 하면 i가 i++ 이기때문에 0에서 3까지 늘어나서 3이 출력이 될 줄 알았는데 4가 출력이 되네요. 왜 4가 출력이 됐는지 궁금합니다. 디버깅을 해봐도 원인을 알 수가 없어서 질문드려요. int i; i = 0; while (i++ < 3); printf("%i\n", i);
- 해결됨홍정모의 따라하며 배우는 C언어
재귀 호출 개념에 대해서 이해한건지 확인 부탁드립니다.
안녕하세요, 선생님 제 나름대로 이해할려고 풀어서 이해해봤는데 이게 맞는건지 확인해보고 싶습니당 선생님이 작성한 예제에서 이해한 내용은 my_func(my_func(my_func(my_func))) 이런식으로 실행이 되고 스택도 n(n(n(n))) 이런식으로 쌓인다고 이해했습니다. 그리고 반대로 돌아갈때도 my_func(my_func(my_func(my_func))) 에서 my_func(my_func(my_func)) my_func(my_func) 이런식으로 돌아가는 형태로 이해했습니다. 그러면 스택에서도 n(n(n)) -> n(n) 이런식으로 위에서 없어지는 걸로 이해했습니다 그래서 이걸 좀 더 명확히 이해하고자 저의 생각한대로 코드를 작성해서 디버거로 테스트를 해보았습니다. 제가 이해한 형식대로 코드를 작성을 해보았더니 돌아가는 형태를 확인했습니다. main함수에서 A함수를 호출하고 A함수에서 B함수를 호출하는 형태로 구성을 해보면 (main -> A -> B) B함수의 코드들이 끝나면 바로 main 함수로 돌아갈줄 알았는데 A함수로 돌아가고 그 다음 A함수에서 main함수로 돌아가는걸 확인했습니다. (B -> A -> main) 디버거로 돌아가는 걸 찍어보았습니다. 마지막 함수인 test3이 종료가 되면 바로 main 함수로 가서 끝나는게 아닌 test2로 가는걸 화살표로 확인할 수 있었습니다. 게다가 test2로 돌아갈때 test2함수의 영역 끝인 } 로 돌아가는것이 아닌 test3함수를 호출한 구문으로 돌아가는것을 확인하였습니다. 그 다음 f11을 눌러 확인해본 결과 test3함수의 변수인 n이 스택에서 사라지고 test2로 돌아와 n변수를 printf로 재출력 해본 결과 스택에 남아있었던 test2의 n변수가 출력이 되어 기존에 출력했었던 거와 메모리주소가 동일하단걸 확인하였습니다. 즉 실행이 되었던 되감기 형태로 돌아가서 종료가 된다는걸로 이해했습니다만 제가 이해한게 맞는건지 확인 부탁드리겠습니다.. ㅜㅜ
- 미해결홍정모의 따라하며 배우는 C언어
for (i = 1; i <= 10; i++)에서 i ++은 ;를 안붙여도 되는건가요?
for (i = 1; i <= 10; i++)에서 i ++은 ;를 안붙여도 되는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
2차원과 1차원 배열은 같은 것인가요??
int *ptr = arr //>>1차원 배열에서 int *ptr = &arr[0][0];//>>2차원 배열에서 &연산자나 [][] 이 없으면 에러가 납니다 그런데 값은 정상적으로 출력이 됩니다 왜 그런지 잘 모르겠습니다 또한 2차원 배열 arr[0][0]의 주소를 출력해보려 해도 출력되지 않습니다 이유를 알고 싶습니다 너무 궁금합니다
- 미해결홍정모의 따라하며 배우는 C언어
파일이 열리는데 아무것도 표시되지 않습니다.
int main() { int c; FILE *file = NULL; char file_name[] ="my_file.txt"; file = fopen(file_name,"r"); if (file == NULL) { printf("failure"); exit(1); } while ((c = getc(file)) != EOF) putchar; fclose(file); return 0; } 실행을 시키면 사진처럼 아무것도 뜨지 않습니다. 파일에는 hi를 입력시켜서 저장한 상태입니다. 뭐가 잘못된 걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
원하는 값이 안 나옵니다.
long get_long(void); int main() { long num1; while (1) { printf("Input an integer 1 between 100.\n"); num1 = get_long(); if (num1 > 1 && num1 < 100) { printf("okay!"); break; } else printf("try again!"); } return 0; } long get_long(void) { long num; char c; printf("Input an integer and press enter.\n"); while (scanf("%ld", &num) != 1) { printf("your input ("); while ((c = getchar()) != '\n') putchar(c); printf(") is not an integer.\n"); } printf("your input (%ld) is correct!", num); } 제가 이렇게 작성을 했는데요 숫자가 저 범위에 해당하지 않는 것을 넣어도 if (num1 > 1 && num1 < 100)을 수행하길래 디버그를 해봤는데요 제가 처음에 10000을 입력했는데 이게 함수 get_long를 거쳐서 num1이 34가 됐는데 왜 이렇게 된 걸까요? 뭐가 잘못된 걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
2분 30초
void display(char cr, int lines, int width) { int row, col; for (row = 1; row <= lines; row++) { for (col = 1; col <= width; col++) putchar(cr); putchar('\n'); } } int main() { char c; int rows, cols; while (1) { scanf("%c %d %d", &c, &rows, &cols); display(c, rows, cols); if (c == '\n') break; } } 결과 t 2 1 t t r 2 2 빈칸 빈칸 빈칸 빈칸 C:\Users\jungh\source\repos\project2sol\Debug\chapter8.exe (process 12432) exited with code 0. Press any key to close this window . . . 이렇게 구현을 하였는데 실행을 했을 때 위처럼 끝이 나는데 무슨 차이 때문에 교수님이 실행하신 것과 다른지 알고 싶습니다. 제가 원하는 것은 2분 30초에서 교수님이 하신 것처럼 실행되는 것을 원합니다.
- 미해결홍정모의 따라하며 배우는 C언어
linking/링크의장점?
한 파일에 함수를 작성하는 것과 링킹등을 활용했을 때의 차이점이 뭔가요? 파일을 2개로 나눴을때의 단점과 장점이따로있나요?
- 미해결홍정모의 따라하며 배우는 C언어
에러 발생
error C4700: 초기화되지 않은 'ch' 지역 변수를 사용했습니다. // 제 코드입니다(메인 함수 안쪽 부분입니다) char ch; int count = 0; while ((ch == getchar()) != PERIOD) { if (ch != '\n' && ch != ' ') { count++; } } printf("%d\n", count); 계속 while문 부분에서 에러가 뜨네요... 변수를 선언하면 꼭 초기화를 해야 하나요?? 그리고 무엇으로 초기화를 해야 하나요?? ch에 NULL값이나 0을 집어넣으면 결과가 달라집니다..
- 미해결홍정모의 따라하며 배우는 C언어
안녕하세요 int second = 0과 같이 초기화는 반드시 해야하는건가요?
안녕하세요 int second = 0과 같이 초기화는 반드시 해야하는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
이해한게 맞는지 질문드립니다!
안녕하세요~ 항상 자세한 답변 감사드립니다 #include <stdlib.h> int count() { double* ptr = NULL; ptr = (double*)malloc(30 * sizeof(double)); for(int i = 0; i < 30; i++) { *(ptr + 1) = i; } } int main() { count(); } 이렇게 작성한경우, ptr에 할당된 메모리 공간들은 malloc때문에 메모리 영역 중 heap 영역에 240 바이트만큼 저장된다는건 알겠는데요, 만약 main문에서 count가 호출될때 ptr은 지역변수니까 스택에 저장되어있겠죠? 그런데 count가 종료될 경우 스택영역에서 pop되니까 메모리공간에 for문 돌면서 초기화 해준 값들이 분명 heap영역에 존재는 하는데 이걸 참조를 못하게 된다 이소리인가요? 중간에 마치 친구 전화번호를 종이에 적어서 가지고있었는데 잃어버렸다. 근데 전화번호적은 종이를 잃어버렸다고 친구가 사라지는건 아니다 라고 비유를 드셨는데 맞게 이해한건지 궁금합니다. ps. 혹시 for문에서 double이 8바이트니까 30번돌면 되는거 맞나요?
- 미해결홍정모의 따라하며 배우는 C언어
getchar() 질문
float min = FLT_MAX; float max = -FLT_MAX; float sum = 0.0f; float num=0.0f; int n = 0; while (getchar(num) != 'q') { max = (num > max) ? num : max; min = (num < min) ? num : min; sum += num; n++; } if (n > 0) printf("min =%f, max=%f, ave=%f", min, max, sum / n); else printf("no input"); 제가 이렇게 실행을 하였더니 min =0.000000, max=0.000000, ave=0.000000 이렇게 나와서 디버그를 해봤더니 getchar(num)가 실행돼서 숫자가 입력되어도 max, min의 값은 안 바뀌고 초기화된 0을 계속 유지하더라고요 왜 그러는 건가요? 뭐가 잘못 되었나요?
- 미해결홍정모의 따라하며 배우는 C언어
가상프로세서에 대한 질문입니다
일단 저는 대학에서 컴퓨터 공학을 전공하고 있는 학생입니다. 가상의 프로세서가 작동하는 방식에 대해 제가 맞게 이해했는지에 관해 여쭤보고 싶어 문제와 함께 질문 납깁니다. 제가 궁금한 것은 0x0A라는 주소에 데이터 변수 A가 저장되어 있다고 문제에서 알려줬는데 IR레지스터는 'LOAD R1 A'라는 명령문을 해석해야 레지스터 1에 A를 LOAD할 수 있지 않나요?? 그럼 LOAD R1 A라는 명령문은 주기억장치 어디에 저장되어 있는건가요??
- 미해결홍정모의 따라하며 배우는 C언어
아예 메인함수를 보지않고 구현했습니다. 출력은정상인데 단점이무엇일까요
선생님것과 비교해서 단점이무엇일까요 함수화는 전혀 이루지 않은 코드입니다. int main() { int arr[5] = { 64, 25, 12, 22, 11 }; int min = 0; int swap = 0; for (int i= 0; i < 5;i++) { for (int a = i; a < 4; a++) { if (arr[a] > arr[a + 1]) min = a + 1; }; if (min > 0) { swap = arr[i]; arr[i] = arr[min]; arr[min] = swap; min = i+1; }; }; for (int b = 0; b < 5; b++) printf("%d ", arr[b]); return 0; }