깨알 C언어 | 29. 2차원 배열과 포인터 (1)

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

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

  • @min2341
    @min2341 Год назад +5

    설명 진짜 기깔나게 잘하십니다...어떻게 이해를 이렇게 잘 시켜주시지

    • @HeungSsaem
      @HeungSsaem  Год назад

      안녕하세요~~~
      도움이 되셨다니 정말 다행이에요~~^^
      혹시 모르는게 생기면 언제든 올려주세요.
      쉽게 설명 드리도록 하겠습니다.
      감사합니다.

  • @Teighborhood
    @Teighborhood 2 года назад +5

    강의 역대급으로 이해가 잘됩니다......굿입니다
    복받으세요

    • @HeungSsaem
      @HeungSsaem  2 года назад

      안녕하세요..
      잘 이해해주셔서 감사합니다. ^^
      꼭 합격하시길 응원합니다.

  • @intp3398
    @intp3398 Год назад +1

    포인터가 포함된 강의 부터는 연습장에다가 그림을 똑같이 그려서 해보고 있는데 쉽게 느껴지네요!?
    오늘도 감사합니다!!!

    • @HeungSsaem
      @HeungSsaem  Год назад

      안녕하세요~~
      지금 하시는 업무가 아무래도 자바다 보니 C언어 많이 어렵지요..ㅜㅜ
      그나마 자바는 좀 나을텐데..
      꼭 그림을 그려주셔야 해요..
      저도 그림 안그리면 엄청 헷갈리더라구요~~
      오늘도 수강해주셔서 감사합니다. ^^

  • @hyl67
    @hyl67 2 года назад +7

    선생님 궁금한게 있습니다.
    06:00 문제에서 x=*p 값이 103번지의 값 5를 가르킨다고 하셨잖아요? 근데 1:11 문제에서는 *a가 a의 주소 100의 값을 안구하고 주소 값 100을 구하네요. 1분에 나오는 문제대로 하면 6분 문제에서도 x=*p값은 주소값 103이고 x=**p 값이 주소값의 값인 5 아닌가요 ㅠ
    아니면 1번 문제에서 나오는 대표행과 관련 있는 건가요...

    • @HeungSsaem
      @HeungSsaem  2 года назад +4

      배열의 참조와 포인터의 참조는 살짤 다르다고 보시면 됩니다.
      2차원 배열의 경우 배열 명은, 행 대표주소의 첫번째 주소값을 가지고 있고, 포인터는 메모리 주소를 직접 참조하게 됩니다.
      1:11 에서 *a 는 100번지라고 했는데요...a는 지금 배열의 대표 주소입니다.
      a는 각 행의 대표 번지중에서 a[0]번지를 가리키고 있고, a가 가리키고 있는 공간의 값입니다.
      a가 가리키고 있는 공간은 행 대표번지의 첫번째 a[0] 그 공간의 값이기 때문에 100번지 입니다.
      06:00 분에서 가리키고 있는건,
      포인터 변수 p 는 data[1] 이 가지고 있는 주소값 103을 가지고 있습니다.
      포인터 변수는 주소를 직접 참조하고 있기 때문에 배열과 같은 배열 대표주소와 행 대표주소를 가지고 있지 않습니다.
      p 변수는 103번지를 바로 가리키고 있다고 보시면 될 듯 합니다. ^^

    • @hyl67
      @hyl67 2 года назад

      @@HeungSsaem 선생님 답변 감사합니다! 일이 있어서 뒤늦게나마 복습하고 있네요 ㅠㅠ 혹시
      1. 1분 문제에서 제가 그러면 int *b=a[0] 이라는 포인터 값을 따로 만들고 *b 값을 출력해라 써놓으면 이건 a[0]의 주소 100을 직접 참조하기 때문에 1값이 출력되는거 맞나요?
      반대로 6분 문제에서는 포인터 참조 없이 바로 printf ~ .*data 로 출력하라고 하면 data(대표주소)는 대표번지 data[0]을 가리키는거라 100이 출력되는게 맞는건가요?...

  • @jaeyun1001
    @jaeyun1001 3 месяца назад

    어 ? 강의 정지해보고 혼자 풀어봤는데. 맞네요 ? 여윽시 씨의 신 !!! 씨신!!

  • @akaps99
    @akaps99 2 года назад +3

    감사합니다👍👍

    • @HeungSsaem
      @HeungSsaem  2 года назад +1

      시청해 주셔서 감사드립니다. ^^

  • @sopk2486
    @sopk2486 Год назад +10

    [중요한 부분- 두 케이스의 결과물이 다른 이유]
    배열의 참조와 포인터의 참조는 다름.
    1. 0:29-4:03 : 배열의 참조 설명(영상 예시로 설명)
    2차원 배열 a(=배열명)는,
    ① 행마다 대표번지가 있고, 각각의 대표번지는 각 행의 첫 번째 주소값을 가지고 있음 : a[0]-100, a[1]-102, a[2]-104
    ② 그리고 전체 배열의 대표주소도 있고, 그 대표주소는 모든 행 중의 가장 첫 번째 주소값을 가지고 있음 : a-100
    ③ ★★그리고 그 대표주소(a)가 각 행의 대표번지 중에서도 (가장 첫번째 번지수인) a[0]번지를 가리키고 있음★★
    ④ 그러므로 *a는 포인트변수의 의미대로, a가 '가리키고 있는 공간의 값'이므로, a[0]의 주소값인 100!
    2. 4:18- : 포인트의 참조 설명(영상 예시로 설명)
    ① 행마다 대표번지가 있고, 각각의 대표번지는 각 행의 첫 번째 주소값을 가지고 있음 : Data[0]-100, Data[1]-103, Data[2]-106
    ② 그리고 전체 배열의 대표주소도 있고, 그 대표주소는 모든 행 중의 가장 첫 번째 주소값을 가지고 있음 : Data-100
    ♠♠♠여기까지는 첫번째 케이스와 동일함♠♠♠
    ③ *p = data[1] // 포인터변수 p생성하고, data[1]의 주소값 대입 ▷ p = 103
    ④ x = *p //포인터변수 p가 가리키고 있는 주소(103번지)값인 5! ▷ x = 5
    ⑤ 이렇게 포인터 변수를 생성하여 주소를 (임의로) "직접" 참조하고 있기 때문에, (첫번째 케이스처럼) 전체 배열의 대표주소와 행별 대표주소에 대해서 고려할 필요 없이 지금껏 풀어온 배열의 문제처럼 다뤄야 함.
    3. 결론
    첫번째 케이스는 배열에서 배열명은 행 대표주소 중에서도 첫번째 주소값을 가진다는 것이 디폴트라는 규칙을 근거로 풀어야 하는 문제.
    두번째 케이스는 포인터 변수를 생성해서 포인터는 메모리 주소를 (임의로) "직접" 참조하고 있다는 것을 근거로 풀어야 하는 문제.

    • @HeungSsaem
      @HeungSsaem  Год назад

      안녕하세요~~~
      잘 정리해주셔서 감사합니다. ^^

    • @handsomemin
      @handsomemin Год назад

      오 첫줄 굉장히 감사합니닷

  • @jingjinge
    @jingjinge 2 года назад +3

    선생님,
    06:25 부분에서 y=*(p+2) 에서 y는 기존 p(=103)에서 2를 더한 105가 가리키는 9가 되는건 이해가 되는데,
    p값은 103에서 왜 105로 변화하나요? p++와 같은 후위연산처럼 하는건가요?

    • @HeungSsaem
      @HeungSsaem  2 года назад +3

      아...저 부분에서 p 값이 105로 변환은 안됩니다. ^^
      값을 바꿔서 p 에 저장을 안했기 때문에 103을 유지 하고 있는거고요..
      제가 그냥 냅다 바꿔버렸네요~~
      103값 그대로 유지하고 있다고 알아주세요~~
      감사합니다. ^^

  • @김찌남
    @김찌남 2 года назад +1

    미쳤네요.. 포인터가 해깔렸는데 쏙쏙들어오네요

    • @HeungSsaem
      @HeungSsaem  2 года назад +1

      아무래도 어려운 개념인데 쉽게 이해해주셔서 감사합니다. ^^
      4월에 올라가는 프로그램 특강도 꼭 들어주시고 시험 합격해주세요~~

  • @euuuns9595
    @euuuns9595 9 месяцев назад

    안녕하세요.
    문제에서 x와 y 값을 구할 때,
    2:48 설명을 참조하면 2차원 포인터니까 x=**p; , y=**(p+2);로 표현 되어야 하는 게 아닌가 싶은데 어떻게 구분할 수 있을까요?

  • @그냥저냥-o2p
    @그냥저냥-o2p 2 года назад

    정말 이젠 포인터가 적응이 되어 가는데.. 표현을 익혀놓아야겠어요...
    감사합니다~

    • @HeungSsaem
      @HeungSsaem  2 года назад

      안녕하세요~~
      포인터 적응중이시군요..^^
      어렵지만 좀만 힘내주세요..^^

  • @user-fu2ec1rq8p
    @user-fu2ec1rq8p Год назад

    깨알 C언어 | 29. 2차원 배열과 포인터 (1)
    문. 1:04 정답
    각각의 행을 대표하는 것, a[0], ~
    첫 시작 주소 100, 배열이라고 하는 것은 물리적으로 연속된 공간,
    100 101
    102 103
    104 105
    a[0], ~ , 대표 행(1열 행에 해당하는 행)의 주소값을 갖는다, = 각 행의 10번지에 해당하는
    a*?
    // 1차원 배열에서는 특정 값을 참조했었는데, a[0]의 주소값, 즉 자기자신을 참조,
    [2차원 배열일 경우, *a는 주소값을 가리킨다,
    a> 100
    *a> 100
    **a> 1
    a = *a?]
    문. 4:07 정답
    100 101 102
    data[0] 1 3 4
    103 104 105
    data[1] 5 2 9
    106 107 108
    data[2] 6 8 7
    답. 6:52
    그림만 정확하게 그리면 어렵지 않은 문제,

  • @한승보-s1k
    @한승보-s1k 8 месяцев назад

    선생님! 너무 이해가 잘되어 잘 듣고있습니다 감사합니다 혹시 정보처리기사 외에 다른 개발이나 운영 실무에 관련된 그런 강의는 유료로도 따로 없는건가요?! 선생님의 강의를 통해 실무 노하우와 이론 앞으로의 학습(다른 자격증 듣)을 들을 수 있다면 너무 좋을거 같습니다!

    • @HeungSsaem
      @HeungSsaem  8 месяцев назад

      안녕하세요~~
      올해 자료구조 강의를 기획중입니다.
      제가 자바 개발을 그만둔건 꽤 오래 되어서요..
      원론적인 실무강의만 기획할 듯 합니다. ^^

  • @기럭공지
    @기럭공지 2 года назад

    감사합니다

    • @HeungSsaem
      @HeungSsaem  2 года назад

      시청해 주셔서 감사드립니다.

  • @이찬석-u5v
    @이찬석-u5v 3 месяца назад

    선생님 a는 a의 배열주소를 가리키니까 100이고 *a는 1을 가리킨다 생각하고 첫 인수값은 주소값이니까 결국 똑같은 100이 나온다고 생각해도 될까요 ?

  • @정진영-y9m
    @정진영-y9m 6 месяцев назад

    ❤(~3:10)(5:19~6:55)

  • @양꼬치는행복해
    @양꼬치는행복해 2 года назад

    강의 감사합니다 이해가 잘됩니다 ㅎㅎ

    • @HeungSsaem
      @HeungSsaem  2 года назад +1

      엇...오늘은 주간타임이 아니신가보네요...
      저녁이나 그럴때 일하시는게 더 힘드실텐데...ㅜㅜ
      틈틈히 공부하시느라고 고생 많으세요~~
      꼭 합격하실꺼에요...제가 열심히 응원하겠습니다. ^^

    • @양꼬치는행복해
      @양꼬치는행복해 2 года назад

      @@HeungSsaem 감사합니다 선생님 ㅎㅎㅎ

  • @수인suin-g3l
    @수인suin-g3l Год назад

    int 자료형은 4바이트라고 알고있는데 a[0]은 100번지라면 a[1]은 108번지가 되어야하지않나요?

  • @hyerip
    @hyerip Год назад

    선생님 안녕하세요!! 2차원 배열에서 만약 data[0] 이게아닌 int *p = data; 를 가리키게 되면 y = *(p+2) 일때 주소값이 옮겨지는게 아닌 data[1]로 행이동이 되는걸까요?! ㅠㅠ 헷갈리네용 😂😂

    • @HeungSsaem
      @HeungSsaem  Год назад +1

      안녕하세요~~~
      결론부터 말씀드리면 아닙니다. ^^
      int *p 는 단순히 주소값을 가지는 포인터 변수 이기 때문에,
      data가 가지고 있는 값 100번지를 가지게 되고,
      p+1 을 한다고 다음 행대표주소를 참조하지 않습니다.
      data+1 이 다음 행대표주소를 참조하게 됩니다.
      p+1 은 p 가 100이라고 가정했을때, 101번지가 됩니다.
      단순 1차원 포인터 배열이기 때문입니다.
      ruclips.net/video/Y7jAiTkWKLk/видео.html
      이 영상을 한번 참고해주시면 좋을 듯 합니다.
      감사합니다. ^^

  • @블루-o1t
    @블루-o1t Год назад

    배열의 참조와 포인터의 참조가 다르다고 하셨는데 어떻게 구별하나요? 뒷강의 들었는데 어떤경우가 배열의 참조이고 어떤 경우가 포인터의 참조인지 모르겠어요ㅠㅠ

    • @HeungSsaem
      @HeungSsaem  Год назад

      안녕하세요~~
      요거 아마 엔잡에도 질문을 주셨던 듯 한데요~~
      배열이나 포인터나 주소를 이용하는 건 동일합니다.
      다른 경우는 인덱스를 사용할때 살짝 다른데요.
      int a[5] = {1, 2, 3, 4, 5};
      int *p = a + 1;
      1이 해당하는 주소가 100번지라고 가정하면, a 는 100번지를 가지게 됩니다.
      왜냐면 배열은 시작하는 첫번째 주소의 주소값을 가지기 때문에 100번지를 가지게 됩니다.
      그리고 a[0] 을 출력하면 1이 출력이 됩니다.
      p 는 a + 1을 했기 때문에,
      p 는 101 번지를 가지고 있습니다.
      p 를 배열명으로 인식을 하게 되면 p 가 가리키는 101은 배열의 첫번재 시작 주소가 됩니다.
      그래서 p[0] 을 출력하면 2가 출력이 됩니다.
      이렇게 다른 형태로 사용이 가능합니다.
      감사합니다. ^^

  • @user-kw3po4cj8u
    @user-kw3po4cj8u 2 года назад

    [3]은 크기가 3이니까 0,1,2,[1]은 크기가 1이라 0 한개라
    그냥 일자로 쭉 늘어트려서 1,4 나왔는데
    [ ] 이게 배열안에 있는 인덱스값인지 배열의 크기값인지 헷갈려서 미치겠네요
    첫줄 배열선언 이후에는 전부 인덱스인가요?
    그리고 [ ] 공란의 의미가.. 궁금합니다

    • @HeungSsaem
      @HeungSsaem  2 года назад

      안녕하세요~~~
      [] 공란의 의미는 동적으로 늘어날 수 있다는 표현이에요~~
      크기가 정해지지 않았기 때문에 나중에 동적으로 크기를 변화시킬수 있습니다.
      [3] 은 크기가 3개라는 의미 입니다.
      지금 강의는 2차원 배열이고, data[][3] 의 의미는 행은 동적이고 열이 3개라는 의미가 됩니다.
      그러면,
      1, 3, 4
      5, 2, 9,
      6, 8, 7
      이런 논리적 구조로 만들어지게 됩니다. ^^

    • @user-kw3po4cj8u
      @user-kw3po4cj8u 2 года назад

      @@HeungSsaem 동적이였군요 감사합니다

  • @두루루-d3q
    @두루루-d3q 2 года назад +2

    진짜 포인터 너무 어려워요

    • @HeungSsaem
      @HeungSsaem  2 года назад +1

      안녕하세요~~
      포인터 정말 어렵지요..ㅜㅜ
      전공하는 학생들도 C언어 공부할때 포인터 부분에서 많이 막히더라구요.
      그래도 조금만 힘내주세요
      포인터 꼭 정복하실 수 있을꺼에요.
      화이팅!!! ^^

  • @Ozzz77118
    @Ozzz77118 Год назад

    초반부 2행3열 3행2열 헷갈리시면 어떡합니까. 행이 가로 열이 세로!

    • @HeungSsaem
      @HeungSsaem  Год назад

      앗...그런가요...ㅜㅜ
      혼란을 드려 죄송합니다..