inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

단항 증/감 연산자

해결됨

독하게 시작하는 C 프로그래밍

안녕하세요 강사님 단항 증감 연산자 부분에서 강의에서 풀어주신 예제에 대해서 질문있습니다. data = ++x + ++y + x--;를 풀어쓰면 data = ++x + ++y + x ; x--; 가 된다고 하셨는데요 제가 캡처한 그림의 빨간 동그라미 부분(x)이 제가 아래에 풀어쓴대로 변형되어서 나온게 맞을까요? x--; 는 단항 증감연산자의 후위식 표기이고 연산의 우선순위는 한 개의 구문(세미콜론이 다 끝나고 나서 진행 됨) x--;는 x-=1; x=x-1; 와 같기에 data = ++x + ++y + x-1 ; 과 같이 쓸 수 있고 이때 x의 값에서 -1 이라는 연산의 우선 순위가 구문이 끝나고 적용되므로 x만 남고 후위식은 다음 행으로 옮겨진다 data = ++x + ++y + x ; x--; 빨간색 x 만 남는다는게 이상한데 맞을까요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
semu0523 댓글 1 좋아요 0 조회수 182

이렇게 간단한 것도 구현 못하는 거면 심각한가요?

미해결

홍정모의 따라하며 배우는 C언어

이중 for문 자체는 이해를 하고 있는데 아예 떠올리질 못했습니다...이런 경우엔 뭘 해야 하나요? 복습한다고 해서 의미가 있을까요?

  • c
강진성 댓글 1 좋아요 1 조회수 356

3분 40초경 질문

해결됨

홍정모의 따라하며 배우는 C언어

3분 40초경의 교수님 설명을 듣고 void swap(char** xp, char** yp) { char* temp = *xp; xp = yp; *yp = temp; } void selectionSort(char* arr[], int n) { int i, j, min_idx; for (i = 0; i < n - 1; i++) // Note n - 1 { min_idx = i; for (j = i + 1; j < n; j++) // Note i + 1 { if (strcmp(arr[min_idx], arr[j]) == 1) //if (arr[min_idx] > arr[j]) min_idx = j; } swap(&arr[i], &arr[min_idx]); } } 를 void swap(char* xp, char* yp) { char* temp = xp; xp = yp; yp = temp; } void selectionSort(char* arr[], int n) { int i, j, min_idx; for (i = 0; i < n - 1; i++) // Note n - 1 { min_idx = i; for (j = i + 1; j < n; j++) // Note i + 1 { if (strcmp(arr[min_idx], arr[j]) == 1) //if (arr[min_idx] > arr[j]) min_idx = j; } swap(arr[i], arr[min_idx]); } } 예제를 이렇게 바꿔봤습니다. 포인터 변수의 주소를 넘겨주는 대신에 포인터 자체를 넘겨주고 swap 함수 안의 xp나 yp에 *를 때주면 첫 번째 예제와 두 번째 예제가 같아지는 것 아닌가요? 뭐가 잘못된건지 이해가 가질 않습니다. 추가로 swap 함수에 대해서 설명을 해봤는데 제 설명이 맞는건지 알려주시면 감사하겠습니다. swap의 매개변수를 char**로 적은 이유는 넘겨줄 게 포인터 변수의 주소라 char에 **를 붙여줬기 때문이다. 그리고 swap 함수 안에서 xp나 yp에 *를 붙인 이유는 매개변수로 넘겨준 건 arr[i], arr[min_idx]라는 포인터의 주소이고 스왑 해줘야 할 건 그 포인터의 메모리 공간에 있는 주소값이기 때문이다.

  • c
용개형멋져 댓글 1 좋아요 2 조회수 191

13분경 질문

해결됨

홍정모의 따라하며 배우는 C언어

https://www.inflearn.com/questions/445486 이 질문의 답변에서 strncpy는 복사 하려는 공간이 복사 대상보다 클 경우 null value로 채워주는 것으로 알고 있습니다. 라고 말씀을 해주시는데 그러면 char dest[100] = ""; // make sure memory is enough char source[] = "Start programming!"; strcpy(dest, source); strncpy(dest, source, 5); 이걸 실행 했을 때 Start만 출력이 되어야 하는 거 아닌가요? 근데 교수님은 Start가 복사 될 때 복사 될 문자열에 NULL 캐릭터가 없어서 위의 예제를 실행하면 Start programming!가 전부 출력 된다고 말씀하셨고 실제로 그렇게 됐잖아요 교수님 말씀이 맞는건지 아니면 제가 답변자님 답변을 잘못 이해한 것인지 잘 모르겠네요 source가 들어갈 dest에 이미 데이터가 들어가 있어서 나머지 공간을 NULL 캐릭터로 채워주지 않은거라고 해석해도 될까요? 그리고 Start programming!이 전부 출력되는 이유를 제가 강의를 듣고 나름대로 설명해 봤는데 이게 맞는지 모르곘네요. 위의 예제를 실행시키면 "Start”만 출력을 할 것 같지만 "Start programming!" 전부를 출력하는데 그 이유는 strncpy() 함수에서 원본을 복사해서 넣을 때 복사본의 맨 마지막에 NULL 캐릭터를 추가해주지 않고 문자열을 복사해서 넣어줄 공간만 신경 쓰지 그 외의 공간은 신경 쓰지 않기 때문이다. (dest에서 Start가 들어갈 공간만 신경 쓰지 나머지 공간은 신경 쓰지 않는다는 뜻) 라고 설명을 해봤어요

  • c
용개형멋져 댓글 1 좋아요 2 조회수 198

2분경 질문

해결됨

홍정모의 따라하며 배우는 C언어

char str[] = { 'H', 'I', '!' }; 여기서는 str이라는 문자열에 NULL 캐릭터가 없는데 char str2[15] = { 'H', 'I', '!' }; 여기서는 str2라는 문자열에 널캐릭터가 있더라구요 차이는 빈공간이 있느냐 없느냐 차이인 것 같은데 str에는 빈공간이 없어 NULL 캐릭터를 넣어줄 공간이 없어서 puts() 함수로 출력하면 'H', 'I', '!' 이외의 문자들이 출력이되고 str2에는 빈공간이 있어 그 자리를 NULL 캐릭터로 채워줘서 puts() 함수로 출력을 하면 'H', 'I', '!' 까지만 출력을 해주는 게 맞나요? 뭔가 더 알맞는 표현으로 설명이 가능할 거 같은데 저는 잘 안되네요

  • c
용개형멋져 댓글 1 좋아요 2 조회수 168

입력 버퍼에 대한 개념이 없는데 4분 30초경 설명

미해결

홍정모의 따라하며 배우는 C언어

입력 버퍼에 대한 개념이 없는데 4분 30초경 설명은 이해할 수 없는거 아닌가요..? 제가 앞 강의 중에서 놓친 부분이 있는지궁금하네요...질의응답 글 보고 입력버퍼에서 getchar로 값을 하나씩 꺼내올 때 입력버퍼에서도 하나씩 사라진다는걸 알았는데 제가 이해한 내용이 맞나요??

  • c
강진성 댓글 1 좋아요 0 조회수 253

오류

미해결

홍정모의 따라하며 배우는 C언어

수업에 나온 것과 똑같이 코딩을 했는데 오류가 다음과 같이 뜨는데 해결이 되질 않습니다.

  • c
양주원 댓글 2 좋아요 1 조회수 268

size_t 자료형 관련 질문

해결됨

독하게 시작하는 C 프로그래밍

안녕하십니까? 강사님! fread함수의 반환자료형이 size_t로 되어 있는데 fread함수의 반환값을 받는 변수의 자료형을 size_t 변수명; 이런식으로 변수를 정의해도 문제가 없는지 궁금합니다. 그리고 int 나 long 등의 변수명을 (size_t)변수명; 으로 강제형변환 해도 문제가 없는지 궁금합니다. 수고하십시오

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
ssmjung 댓글 1 좋아요 0 조회수 229

9분 45초 경 질문

미해결

홍정모의 따라하며 배우는 C언어

처음에 변수로 잡은 것이 double이면 scanf에 %d를 입력하면 왜 안 되는 건가요? 왜 %d가 아니라 %lf로 입력을 했는지 잘 이해가 가지 않습니다. 혼자서 %d 넣고 해보니까 에러가 떠요.

  • c
양주원 댓글 1 좋아요 1 조회수 177

저도 6분 30초경 &end가 이해가 잘 안되요

해결됨

홍정모의 따라하며 배우는 C언어

함수가 작동하는 구조가 이게 맞는지 궁금합니다. 매개변수로 이중 포인터를 집어넣으면 이중 포인터가 가리키는 포인터의 메모리 공간에 변환할 수 없는 문자의 공간의 주소를 대입해주는 게 맞나요? 이게 맞다면 굳이 그냥 포인터에 주소를 대입해 주는 게 아니라 이중 포인터를 매개변수로 이중 포인터가 가리키는 포인터에 주소를 대입해주는 이유가 뭔가요?

  • c
용개형멋져 댓글 1 좋아요 2 조회수 285

2분 13초경 if (new_line)이 있어야 하는 이유

해결됨

홍정모의 따라하며 배우는 C언어

new_line = strchr(line, '\n'); 에서 line 문자열에서 '\n'을 찾으면 new_line에 포인터를 대입하고 못 찾으면 NULL 캐릭터를 대입하는데 포인터를 대입하고 *new_line = '\0';을 실행시키면 의도대로 되는 것이고 널 캐릭터를 대입하고 *new_line '\0'을 실행시켜도 문제는 생기지 않을거 같아서 if (new_line) 이라는 문장이 없어도 괜찮을 거 같은데 왜 있는 건가요? 널 캐릭터를 대입하고 *new_line '\0'을 실행시키면 문제가 되서 그런건가요? 아니면 다른 이유가 있는 건가요?

  • c
용개형멋져 댓글 1 좋아요 2 조회수 247

strstr 함수 구현 질문

해결됨

홍정모의 따라하며 배우는 C언어

함수들을 직접 구현해보는 게 좋다고 하셔서 sprintf() 함수를 제외하곤 전부 구현하려고 노력해봤는데 strstr함수는 어떻게 해야 할지 모르겠어서 구글링을 해봤는데 https://blog.naver.com/tipsware/221371715770 이런 글을 발견했어요 코드를 따라치다 이해가 안되는 부분이 생겼는데 while (*p_find_pos != 0 && *p_pos != 0 && *p_pos == *p_find_pos) 에서 *p_find_pos != 0와 *p_pos != 0이 둘 다 존재하는 이유가 궁금합니다. strstr함수가 어떤 문자열에 특정 문자열이 포함되어있는지 확인하는 함수인데 만약 어떤 문자열과 특정 문자열이 완전히 똑같다면 while의 조건문에서 *p_pos == *p_find_pos 만 있으면 while문이 멈추지 않고 무한히 돌게 되니 널 캐릭터를 만나면 멈출 수 있게 *p_find_pos != 0나 *p_pos != 0 둘 중에 하나는 있어야 한다는 건 알겠는데 왜 둘 다 조건문에 있어야 하는지 잘 모르겠습니다. 강의 내용이 아니라 질문하기가 좀 그랬지만 이런 질문글을 올릴만한 곳을 찾지 못해 여기에 올립니다. 답변 항상 감사합니다.

  • c
용개형멋져 댓글 1 좋아요 2 조회수 345

이중 for 문 별찍기 예제 관련 질문

해결됨

독하게 시작하는 C 프로그래밍

이중 for문 별찍기 예제가 잘 이해 되지않아서 별이 아닌 값을 출력하는것으로 바꿔서 실행했습니다 i 의 값은 그냥 0,1,2,3,4 로 나오는데 j 값은 01, 1 / 02,12,2 로 다른 형태로 나오네요 j이 0~4까지 증가하면서 i와 같아지기전까지 ( j < i ) 비교하게 되면서 비교되는 i값이 같이 나오는건가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
dongheon001 댓글 2 좋아요 0 조회수 283

문자(배)열 복사하는 함수 만들기

해결됨

독하게 시작하는 C 프로그래밍

질문드립니다. 1.size_t를 하시는 이유는 nsiez처럼 예외처리를 위해서 표시하는 건가요? 문제에서 첫번째 매개변수의 메모리 크기가 되도록 구현하기 위해서 사용하는 건가요? 해당 for문만(strlen 사용 없이)위에 작성하더라도 구현은 되는 것으로 처음에 작성했습니다. 그렇게 해도 Deepcopy에는 어긋나는게 없는지 궁금합니다. 만약 위 사진과 같이 return을 하면 지역 변수 주소 반환 오류에 해당하나요? 여기서 szBufferDst는 주소상수 즉 &szBufferDst[0]이 기준요소 이므로 위에 함수에서 포인터를 붙여서 사용하는 건가요? 약 반나절 동안 고민해서 풀어봤습니다만 속이 시원하게 풀리지 않네요 ㅠㅠ 제가 이해를 잘한건지 궁금해서 오늘은 질문이 조금 많습니다. 양해부탁드려요. 🤓

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
최종원 댓글 2 좋아요 0 조회수 413

이게 왜 120이랑 5가 나올까요

미해결

홍정모의 따라하며 배우는 C언어

나름 잘 이해했다고 생각했는데 어떤 부분을 잘못 이해하고 있길래... #define _CRT_SECURE_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)); } long loop_factorial(int n) { int sum = 1; for (int i = 1; n >= i; n--) sum *= n; return sum; } long recursive_factorial(int n) { int sum = 1; sum *= n; if (n > 0) recursive_factorial(n - 1); return sum; }

  • c
yuntyu01 댓글 1 좋아요 1 조회수 500

accounts/url 질의

미해결

장고 설계철학으로 시작하는 파이썬 장고 입문

화면과같이 include 부분 강좌와 다르게 저절로 세팅이 되고 서버 실행하면 계속 오류가나는데 어떻게해야하나요ㅜㅜ

  • python
  • django
동휘김 댓글 2 좋아요 0 조회수 260

인자 인수 매개변수

미해결

홍정모의 따라하며 배우는 C언어

인자란게 인터넷에서 찾아봤을 때 글마다 의미가 다른데 인자는 어떤 건가요

  • c
yuntyu01 댓글 1 좋아요 1 조회수 249

배열의 subscript(index)는 0보다 커야 한다?

미해결

홍정모의 따라하며 배우는 C언어

realm과 realm_tax 변수를 배열로 만들었고, 배열로 만들어진 각각의 공간에 일일히 데이터를 지정해뒀더니, int realm[10]에 딸려있는 realm[0]에 오류가 나더군요. 오류내용은 제목과 같이 "배열의 사이즈는 0보다 커야 한다." 였습니다. realm[0]에 커서를 대어보니 error-type이란 정보를 볼 수 있었습니다. 이거 어떻게 해야 오류를 내지 않수 있나요?

  • c
상인김 댓글 1 좋아요 1 조회수 188

10분 15초경 질문

미해결

홍정모의 따라하며 배우는 C언어

dest = "Start something"; // Error 여기서 에러가 생기는 이유를 잘 모르겠어서 찾아보니 같은 질문이 있길래 답변을 봤습니다. https://www.inflearn.com/questions/684074 답변을 보고 컴파일러가 안 해주도록 만들어진 거고 그 이유는 런타임에 내용을 바꾸고 싶다면 한 글자씩 바꾸는 방식으로 사용하도록 의도적으로 그렇게 정해 놨기 때문이라고 답변해주신 건 이해가 됬습니다. 그런데 그렇다고 안해주는 이유가 아예 없는 것은 아닌데 "Start something" 같은 문자열은 컴파일 할 때 프로그램에 탑재됩니다 라는 말씀이 이해가 잘 안됩니다. 문자열이 컴파일할 때 프로그램에 탑재되는 거랑 컴파일 타임이 아니라 런타임에 내용을 바꾸고 싶다면 한 글자씩 바꾸라고 의도적으로 정해 놓은 거랑 무슨 상관인지 모르겠습니다. 답변 항상 감사합니다.

  • c
용개형멋져 댓글 2 좋아요 2 조회수 452

이거 왜 질문이 두번씩 뜰까요

미해결

홍정모의 따라하며 배우는 C언어

int main() { int c = 0; char z; while (1) { printf("Enter the letter of your choice : \na. averngers b. beep\nc. count q. quit\n"); z = getchar(); if (z == 'a') printf("Avengers assemble!\n"); else if (z == 'b') printf("\a"); else if (z == 'c') { printf("Enter an integer : "); scanf("%d", &c); for (int i = 1; c >= i; ++i) printf("%d\n", i); } else if (z == 'q') break; } return 0; } 왜 질문이 2번씩 나올까요

  • c
yuntyu01 댓글 1 좋아요 1 조회수 317

인기 태그

인프런 TOP Writers

주간 인기글