[C강좌] 초보자를 위한 기초 C 언어 강좌 #19 : 구조체

Поделиться
HTML-код
  • Опубликовано: 25 дек 2024

Комментарии • 14

  • @퐁퐁도도
    @퐁퐁도도 6 лет назад +2

    정말 설명도 너무너무 깔끔하게 잘해주시고 이런 강의를 무료로 올려주셔서 감사드립니다..
    인성이 정말 좋으신분같습니다

    • @snowltv
      @snowltv  6 лет назад

      감사합니다~ 앞으로도 좋은 강좌 올릴 수 있도록 열심히 노력하겠습니다~

  • @joon___hk
    @joon___hk 4 года назад

    감사합니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

  • @버프주는판다
    @버프주는판다 3 года назад

    영상 감사합니다.
    개인적인 질문이 있습니다.
    typedef struct_shop {}SHOP; 와 typedef struct {}SHOP; 는 동일하게 동작 한다고 이해 했습니다.
    그렇다면 왜 굳이 _shop를 작성하는 이유가 있는건가요??
    언더바는 의미가 있는건가요?
    현재 의미에 대해서 찾아보고는 있습니다만 개인적으로 궁금하여 댓글 남깁니다.

    • @snowltv
      @snowltv  3 года назад +1

      typedef는 사용자 정의 타입을 만드는 역할을 합니다. 언더바가 특별히 의미가 있는것은 아니고, 중요한 것은 구조체 자체에 이름을 부여하느냐 아니냐의 차이입니다. 전자는 _shop 이라는 구조체를 SHOP이라는 사용자 정의 타입으로 지정한 것이고, 후자는 이름이 정해지지 않은 구조체의 사용자 정의 타입을 SHOP으로 지정한 것인데요. 일반적일때는 사실상 같지만, 같은 구조체를 여러개 typedef 해줄 필요가 있을때는 전자처럼 이름을 넣어줘야 가능합니다.
      가령
      typedef struct _pos
      {
      int x;
      int y;
      } POSITION;
      이라고 했을때
      typedef struct _pos XY;
      이렇게 가능하냐 아니냐의 차이입니다.

    • @버프주는판다
      @버프주는판다 3 года назад

      @@snowltv 감사합니다. 연결 리스트를 공부하고 구현하면서 느낌이 오는거 같습니다 좋은 영상 정말 감사합니다.

  • @CJK-l8t
    @CJK-l8t 6 лет назад

    마지막 성적 계산기 코드 보내주실수 있나요?

  • @itsme_hansome
    @itsme_hansome 3 года назад

    평가에 그냥 comment가 아니라 꼭 *comment 이어야 하나요?

    • @snowltv
      @snowltv  3 года назад

      그 변수 안에 들어갈 값이 문자들의 집합인 문자열이기 때문에, *를 붙여 포인터변수로 선언한 뒤 메모리 할당을 해줍니다. 만약 *을 안 붙이고 선언하게 되면 일반 char변수가 돼서 문자 1개밖에 넣을 수 없습니다.

  • @xianyu6334
    @xianyu6334 7 лет назад

    안녕하세요 2006년도 책에서 예제를 보았는데 도무지 정답이 감이 안와 조심스럽게 정답을 여쭈어봅니다..ㅠ
    문제 1
    #include
    struct _sInData{
    int n1;
    int n2;
    };
    struct _sStrData{
    char str1[20];
    char *str2;
    };
    void main(){
    struct _sInData di,*dip;
    struct _sStrData ds, *dsp;
    dip = &di;
    dsp = &ds;
    scanf_s("%d %d
    ", dip->n1, dip->n2);
    scanf_s("%s %s
    ", dsp->str1,dsp->str2);
    printf("%d %d
    ", dip->n1, dip->n2);
    printf("%s %s
    ", dsp->str1,dsp->str2);
    }
    문제 2
    #include
    struct _sData{
    int *ap;
    int num;
    };
    void main(){
    struct _sData data;
    (//////////////////////////////////////////) //정답 부분..
    printf('%d
    ", data.num);
    printf("%d %d %d
    ", data.ap[0],data.ap[1],data.ap[3]);

    • @snowltv
      @snowltv  7 лет назад

      +Xian Yu 문제가 틀린부분 찾는건가요 아니면 어떤 결과가 나오게 수정하는건가요?

    • @xianyu6334
      @xianyu6334 7 лет назад

      문제가 틀리게 나왔는데.. 그것을 수정해야합나디..ㅠ 이대로 컴파일하면 이상한 결과가 나와서...
      아무래도 *연산이나 &연산을 잘 조합하거나 아니면 제 수준 이상같아서 ㅠㅠ 여쭈어봅니다..감사합니다. 답글도 달아주셔서 ㅠ

    • @snowltv
      @snowltv  7 лет назад +1

      2번은 저 정답 부분에 프로그램 구현을 해서
      printf()에서 에러없이 뭔가가 찍히도록 해야 하는것 같은데
      사실상 1번이랑 비슷하고 분량이 많아질것 같으니
      1번만 풀어봤습니다.
      #include
      #include
      #include
      struct _sInData {
      int n1;
      int n2;
      };
      struct _sStrData {
      char str1[20];
      char *str2;
      };
      void main() {
      struct _sInData di, *dip;
      struct _sStrData ds, *dsp;
      dip = &di;
      dsp = &ds;
      dsp->str2 = (char*)malloc(20);
      memset(dsp->str2, 0, 20);
      scanf_s("%d %d", &dip->n1, &dip->n2);
      scanf_s("%s %s", dsp->str1, 20, dsp->str2, 20);
      printf("%d %d
      ", dip->n1, dip->n2);
      printf("%s %s
      ", dsp->str1, dsp->str2);
      free(dsp->str2);
      }
      scanf_s() 에서는 각 변수의 주소를 받아야 하는데
      처음 scanf_s()는 일반 변수 int가 들어갔으니 '&'를 붙여
      주소로 넘기도록 수정했고
      두번째 scanf_s()에서는 char형 배열과 포인터가 들어가 있었는데
      배열은 문제될 것이 없지만 포인터는 메모리 할당을 해줘야합니다.
      그리고, scanf_s()에서 char형을 쓸때는 변수 뒤에 크기를 숫자로 넣어줘야
      하는데 그게 없어서 20으로 넣어줬습니다.
      이게 구조체와 관계 있다기보다는
      포인터와 메모리할당과 관련있는 문제 같네요.

    • @xianyu6334
      @xianyu6334 7 лет назад

      정말 감사합니다 .ㅠㅠ 속 시원하게 컴파일이 되네요. 깔끔하게 실행되는 거 보고 박수쳤습니다..더욱 더 열심히 애청할게요~