영상보다가 갑자기 느낀게 강의도 정말 잘 하시지만 영상찍으시는 분도 편하게 잘 찍으시는거 같아요. 가끔 강사님만 쫓아다닌다고 필기할거 다 잘라서 계속 뒤로가기 해서 필기해야하는 곳 많이 봤는데 강의 끝까지 다 듣고 잠시 멈춰서 필기해도 편하네요 참:) 강사님도 영상 촬영하신 분도 굳굳굳이네요ㅎㅎㅎ 감사합니다:)
11:33 ~에 배열들의 주소를 저장하는 포인터 즉 배열 포인터가' p'라는 말씀인거죠? 짚어주신건 ' int(*p) ' 로 짚어주셔서요. 사실 포인터(변수)가 p라는건 아는데 왜 int(*p)[5] 이 자체가 배열포인터로 여겨지는걸까요 ㅠ ㅠ 1차원 배열 ' [5] ' 가 있어서 그렇게 느껴지는데 .. 배열포인터가 p인가요, int(*p)인가요 아니면 int(*p)[5] 인가요? 배열포인터의 정확한 표현식이 궁금합니다. (이와 같이 질문을 하는 이유는 포인터 첫 강의에서 포인터가 *p인지 int p인지 int*p인지 질문을 주셨을 때 표현식을 정확히 짚고 넘어가야한다는걸 깨달았습니다. 깨달음을 주셔서 감사합니다.)
안녕하세요 양주종 선생님. 선생님의 포인터 강좌를 하나하나 듣다보니 예전에는 포인터를 그냥 주소로만 치부하고 넘겼고 설사 좀 찜찜하긴해도 뭐 포인터 많이쓰겠나.. 싶었는데 이해도 되는것 같고 그래서 좀 더 깊게 공부하고 싶어 선생님의 유료강좌를 들을 생각이 있습니다. 유료 강좌에선 어떻게 가르쳐주시나요?
일회용계정님 안녕하세요. 컴퓨터는 포인터를 사용하지 않고 설계하기가 거의 불가능합니다. 자바, 파이썬 등 모두 주소를 사용하지만 건드리지 못하게 하죠. 하지만, 포인터를 정확히 이해하면 어떻게 저장되어 있는지 머리속에서 상상이 됩니다. 선배들이 C언어 제대로 하란 이유가 다 있습니다. 유료강좌는 아래 링크 따라가면 안내되어 있습니다. eduon.com/courses/lectureInfo/68 고맙습니다.
질문입니다^^ int a[3][5]; int(*p)[5] = a; 하셨는데, 그럼 위에 [3][5]행렬에서 [3]행은 int(*p)[5] = a;에서 알수 가 없네요 . 포인터 관점에서 봤을때, 몇 행인지 알 수 가 없네요??? int a[3][5]; int a[5][5] 모두 int(*p)[5] = a; 표시되면 안 될 것 같은데요...
안녕하세요. 오랫만에 만나는 좋은 질문입니다. 생각하신게 맞습니다. 포인터와 배열의 차이점입니다. int a[5]; // int형 자료 5개 있다. 시작주소는 a int b; int k[10]; int* p; // p는 int형 주소를 저장하겠다. p = a; p = &b; p = k; p = &a[1]; 모두 가능합니다. 포인터 p입장에서는 시작 주소와 바이트 정보는 있지만 개수 정보는 없습니다. 배열은 시작 주소와 바이트 정보와 개수 정보까지 있지요. 1차원으로 설명했지만, 2차원도 같은 개념입니다. int a[3][5]; // int[5] 3개 모음 int a[5][5]; // int[5] 5개 모음 int(*p)[5]; // int[5]까지 주소 저장하겠음 int(*p)[5] = a; // 모두 가능합니다. p입장에서는 개수는 모릅니다. 그러니 배열명으로 함수 호출 시 개수를 반드시 알려주어야 합니다. 포인터의 강력함과 위험한 상황이죠. 이 부분 시간 내서 동영상으로 만들어 보겠습니다. 그냥 단순히 설명할 내용은 아닙니다. 이해 되셨길 바라고요. 추가 질문 언제든 환영합니다.
아 그리고 p = 200; p +1= 220; p +2 = 240; 이 안되는 이유가 int (*p)[5] = a; 을 선언했고 그에 따라 p에 대한 +1 값은 int 의 바이트 수인 4씩 올라가니까 안되는 건가요? 잘 이해가 가질 않아서요. 저 [5]가 분명히 가로에 대한 것으로 알고 있는데...그러면 p+1해버리면 204..208이렇게 나가는거 아닌가 해서요.
레벨이 다릅니다. 포인터와 배열은 내부적으로 같습니다. 컴퓨터는 int = 4, double = 8 이렇게 인식하는 거죠. 100번지 데이터 읽고 다음에 104번에 있는 데이터 읽을 것인지 120번에 있는 데이터 읽어올 것인지 결정해야 합니다. 이 주소 계산이 잘못되면 전혀 엉뚱한 데이터 가져올 수 있겠죠. int a[5]; a+1 // 4 증가 int a[3][5]; a+1 // 20 증가 int* p; p+1 // 4 증가 int(*p)[5] p+1 // 20 증가 이렇게 다릅니다. 3차원이 되면 또 달라지겠지요. 보통의 머리라면 눈으로만 말고, 반드시 종이에 그려가면서 따져봐야 이해됩니다. 천천히 그려보세요.
선생님 안녕하세요. 강의를 보다가 궁금한점이 생겨서 질문드립나다!!! 6분쯤에, 포인터 p가 배열 b를 가리키는 형태가, 포인터 p가 이차원 배열의 각각의 한줄씩을 가리키는 것과 똑같은 형태이기 때문에, int* p = b; 와 같이 &를 사용하지 않고 int* p = a[0]; 을 사용할 수 있게 된 것인가요? 그렇다면 만약 이차원 배열이 아니라 일차원 배열일 경우에는, 각각의 줄이 한줄로 바뀌기 때문에, 즉 a[0~2]이 a로 바뀌기 때문에, int* p = a[0]; 을 쓰지 못하고 반드시 int* p = a; 로 바꾸어야 하게 되나요? 좋은 강의 감사합니다. 이 영상을 통해 더욱 열심히 공부할게요!!! 건강하세요 선생님.
안녕하세요 선생님 강의 잘 듣고 있습니다. 다시 듣고 있는데 이해가 안 되는 부분이 있어서요 int * p = a[2];가 안 된다고 설명하셨는데, 그 뒤에 p = 240; p + 1 = 244; 를 말씀해주신 건 애초에 int * p = a[2];가 성립이 안 되기 때문에 불가능한 예를 설명해주신 건가요?
박승희님 안녕하세요. 6:13 경에 int* p = a[2]; 이 부분이 가능하다고 설명했는데 듣기에 따라서는 안된다고 들릴 수도 있겠네요. 가능합니다. 이유는 int a[3][5]; 여기서 a는 2차원 배열이고, a[2]는 1차원 배열이기 때문이죠. int b[5]; int a[3][5]; level을 생각해 보세요. b == a[0] b == a[1] b == a[2] 이게 같은 레벨이죠. b != a 이렇게 b와 a는 서로 레벨이 다르죠. int* p = a 이건 레벨이 맞지 않죠. int* p = a[0] int* p = b 이건 가능하겠죠. 천천히 그려보면서 따져 보시길 권합니다. 눈으로 보고 이해 하려고 하면 시간이 더 걸립니다. 즐겁게 공부하세요.
포인터 이해하는데는 선생님 강의가 최고네요 여러강의봤지만 완벽한 이해는 못했는데 선생님강의보니 포인터가 만만해보이기 시작했습니다
멋진 표현이네요
어느순간 포인터가 만만해 보인다
응원합니다
책으로만 공부하기엔 이해하기 어려운 부분이었는데 도움 많이 되었습니다. 좋은 강의 감사합니다
도움이 되셨다니 다행입니다.
그림 그려가면서 즐겁게 공부해 가세요.
이해될때까지 반복해서 학습하겠습니다.
감사합니다.
그려가면서 학습하면 이해도가 올라갑니다.
응원합니다.
설명 친절하게 잘해주시네요
이해가 정확하게 안됬던게 정리되가는 느낌입니다!
이해가 되신다니 기분이 좋습니다
반복해서 보고 소화하면
다른 언어 공부할 때도 많은 도움이 됩니다
고맙습니다
컴공 대학생인데 교수님 수업보다 훨씬 좋은거 같아요 감사합니다
김수환님. 여기 다들 어려워합니다.
포인터 알면 공부가 재밌어요. 화이팅.
솔직히 진짜 제가 여러개 찾아봤고 현재 윤성우의 열혈프로그래밍 책으로 혼자 독학중인데 정말 이해가 안 가는 부분은 양주종선생님의 인강을 듣고 있습니다. 원리를 깊숙히 파고들어서 외우는 코딩공부가아니라 원리를 공부하는 느낌이라고 해야되나 맘같아선 찾아가서 배우고싶네요
안녕하세요.
도움이 되신다니 기분이 좋습니다.
배운대로가 아니라,
스스로 느낀대로 강의합니다.
즐겁게 공부하세요.
@@양주종의코딩스쿨 그런데 혹시 제가 지금 이해가 안가는게 이중 포인터 배열이 이해가 안가는데 어떤 강의를 들으면되나요 특히 이중 포인터 배열중에 문자열 관련된게 이해가 안갑니다
공개 동영상강좌에는 없는 내용입니다.
char ch[5][10];
char* s[5];
이거 두 개 구분해서 혼동하지 않고 사용할 수 있으면
초급은 넘어선것입니다.
나도 윤성우의 열혈c프로그래밍 책으로 독학중인데 ㅋㅋㅋ
간지럽고 애매한 부분을 잘 긁어주셔서 좋네요 감사합니다 ㅎ
고맙습니다 덕분에 하루를 즐겁게 시작합니다
C언어 재밌습니다
햇갈리던게 어느 정도 이해가 됐네요. 결론은 포인터 배열은 배열안에 포인터의 주소를 저장하는거고 배열 포인터는 말 그대로 포인터 안에 배열을 저장하는 거군요
네. 맞습니다.
이거 정확히 이해하면
포인터 자신감 가져도 됩니다.
억지로 꽈놓은 이상한 문제는 건너뛰세요.
영상보다가 갑자기 느낀게 강의도 정말 잘 하시지만 영상찍으시는 분도 편하게 잘 찍으시는거 같아요. 가끔 강사님만 쫓아다닌다고 필기할거 다 잘라서 계속 뒤로가기 해서 필기해야하는 곳 많이 봤는데 강의 끝까지 다 듣고 잠시 멈춰서 필기해도 편하네요 참:) 강사님도 영상 촬영하신 분도 굳굳굳이네요ㅎㅎㅎ 감사합니다:)
대본 없고, 마이크도 없이, 촬영은 왕초보
이렇게 아무 준비없이 촬영한 겁니다.
그래도 좋게 봐주시니 황공합니다.
포인터 제대로 이해하면 두고두고 도움됩니다.
응원합니다.
공부하다 우연히 봣는데 강의 되게 좋네요
고맙습니다 손코딩 잊지마세요
감사합니다. 어느정도 감이 잡힌것 같아요 ㅎㅎ
류현진선수 좋아합니다
포인터 알수록 재밌습니다
화이팅입니다
좋은 강의 감사합니다~
yg님 고맙습니다.
C언어가 재밌게 느껴졌으면 하는 바램이 있어요.
yg님도 그 중 한 명이길 바랍니다.
11:33 ~에 배열들의 주소를 저장하는 포인터 즉 배열 포인터가' p'라는 말씀인거죠? 짚어주신건 ' int(*p) ' 로 짚어주셔서요.
사실 포인터(변수)가 p라는건 아는데 왜 int(*p)[5] 이 자체가 배열포인터로 여겨지는걸까요 ㅠ ㅠ 1차원 배열 ' [5] ' 가 있어서 그렇게 느껴지는데 .. 배열포인터가 p인가요, int(*p)인가요 아니면 int(*p)[5] 인가요? 배열포인터의 정확한 표현식이 궁금합니다.
(이와 같이 질문을 하는 이유는 포인터 첫 강의에서 포인터가 *p인지 int p인지 int*p인지 질문을 주셨을 때 표현식을 정확히 짚고 넘어가야한다는걸 깨달았습니다. 깨달음을 주셔서 감사합니다.)
안녕하세요 양주종 선생님. 선생님의 포인터 강좌를 하나하나 듣다보니 예전에는 포인터를 그냥 주소로만 치부하고 넘겼고 설사 좀 찜찜하긴해도 뭐 포인터 많이쓰겠나.. 싶었는데 이해도 되는것 같고 그래서 좀 더 깊게 공부하고 싶어 선생님의 유료강좌를 들을 생각이 있습니다. 유료 강좌에선 어떻게 가르쳐주시나요?
일회용계정님 안녕하세요.
컴퓨터는 포인터를 사용하지 않고 설계하기가
거의 불가능합니다.
자바, 파이썬 등 모두 주소를 사용하지만 건드리지 못하게 하죠.
하지만, 포인터를 정확히 이해하면
어떻게 저장되어 있는지 머리속에서 상상이 됩니다.
선배들이 C언어 제대로 하란 이유가 다 있습니다.
유료강좌는 아래 링크 따라가면 안내되어 있습니다.
eduon.com/courses/lectureInfo/68
고맙습니다.
자동차 이야기 해서 레이싱 환청이 들리는 줄 알았어요 ㅋㅋㅋㅋㅋ
좋은 강의 감사합니다.
고맙습니다.
즐겁게 공부하세요.
질문입니다^^
int a[3][5];
int(*p)[5] = a;
하셨는데, 그럼 위에 [3][5]행렬에서 [3]행은 int(*p)[5] = a;에서 알수 가 없네요 .
포인터 관점에서 봤을때, 몇 행인지 알 수 가 없네요???
int a[3][5]; int a[5][5] 모두 int(*p)[5] = a; 표시되면 안 될 것 같은데요...
안녕하세요.
오랫만에 만나는 좋은 질문입니다.
생각하신게 맞습니다.
포인터와 배열의 차이점입니다.
int a[5]; // int형 자료 5개 있다. 시작주소는 a
int b;
int k[10];
int* p; // p는 int형 주소를 저장하겠다.
p = a;
p = &b;
p = k;
p = &a[1];
모두 가능합니다.
포인터 p입장에서는 시작 주소와
바이트 정보는 있지만 개수 정보는 없습니다.
배열은 시작 주소와
바이트 정보와 개수 정보까지 있지요.
1차원으로 설명했지만,
2차원도 같은 개념입니다.
int a[3][5]; // int[5] 3개 모음
int a[5][5]; // int[5] 5개 모음
int(*p)[5]; // int[5]까지 주소 저장하겠음
int(*p)[5] = a; // 모두 가능합니다.
p입장에서는 개수는 모릅니다.
그러니 배열명으로 함수 호출 시 개수를
반드시 알려주어야 합니다.
포인터의 강력함과 위험한 상황이죠.
이 부분 시간 내서 동영상으로 만들어 보겠습니다.
그냥 단순히 설명할 내용은 아닙니다.
이해 되셨길 바라고요.
추가 질문 언제든 환영합니다.
아 그리고
p = 200;
p +1= 220;
p +2 = 240;
이 안되는 이유가
int (*p)[5] = a; 을 선언했고 그에 따라 p에 대한 +1 값은 int 의 바이트 수인 4씩 올라가니까 안되는 건가요? 잘 이해가 가질 않아서요.
저 [5]가 분명히 가로에 대한 것으로 알고 있는데...그러면 p+1해버리면 204..208이렇게 나가는거 아닌가 해서요.
레벨이 다릅니다.
포인터와 배열은 내부적으로 같습니다.
컴퓨터는 int = 4, double = 8
이렇게 인식하는 거죠.
100번지 데이터 읽고 다음에 104번에 있는 데이터 읽을 것인지
120번에 있는 데이터 읽어올 것인지 결정해야 합니다.
이 주소 계산이 잘못되면 전혀 엉뚱한 데이터 가져올 수 있겠죠.
int a[5];
a+1 // 4 증가
int a[3][5];
a+1 // 20 증가
int* p;
p+1 // 4 증가
int(*p)[5]
p+1 // 20 증가
이렇게 다릅니다.
3차원이 되면 또 달라지겠지요.
보통의 머리라면 눈으로만 말고,
반드시 종이에 그려가면서 따져봐야 이해됩니다.
천천히 그려보세요.
선생님 안녕하세요. 강의를 보다가 궁금한점이 생겨서 질문드립나다!!!
6분쯤에, 포인터 p가 배열 b를 가리키는 형태가, 포인터 p가 이차원 배열의 각각의 한줄씩을 가리키는 것과 똑같은 형태이기 때문에,
int* p = b; 와 같이 &를 사용하지 않고 int* p = a[0]; 을 사용할 수 있게 된 것인가요?
그렇다면 만약 이차원 배열이 아니라 일차원 배열일 경우에는,
각각의 줄이 한줄로 바뀌기 때문에, 즉 a[0~2]이 a로 바뀌기 때문에, int* p = a[0]; 을 쓰지 못하고 반드시 int* p = a; 로 바꾸어야 하게 되나요?
좋은 강의 감사합니다. 이 영상을 통해 더욱 열심히 공부할게요!!! 건강하세요 선생님.
안녕하세요 선생님 강의 잘 듣고 있습니다.
다시 듣고 있는데 이해가 안 되는 부분이 있어서요
int * p = a[2];가 안 된다고 설명하셨는데,
그 뒤에
p = 240;
p + 1 = 244;
를 말씀해주신 건 애초에 int * p = a[2];가 성립이 안 되기 때문에
불가능한 예를 설명해주신 건가요?
박승희님 안녕하세요.
6:13 경에
int* p = a[2];
이 부분이 가능하다고 설명했는데
듣기에 따라서는 안된다고 들릴 수도 있겠네요.
가능합니다.
이유는
int a[3][5];
여기서 a는 2차원 배열이고,
a[2]는 1차원 배열이기 때문이죠.
int b[5];
int a[3][5];
level을 생각해 보세요.
b == a[0]
b == a[1]
b == a[2]
이게 같은 레벨이죠.
b != a
이렇게 b와 a는 서로 레벨이 다르죠.
int* p = a
이건 레벨이 맞지 않죠.
int* p = a[0]
int* p = b
이건 가능하겠죠.
천천히 그려보면서 따져 보시길 권합니다.
눈으로 보고 이해 하려고 하면 시간이 더 걸립니다.
즐겁게 공부하세요.
@@양주종의코딩스쿨
감사합니다!
된다고 이야기 하셨다니 이해가 바로 되었습니다.
정말 감사합니다ㅠㅠ
선생님 덕에 C언어 이해를 좀 더 쉽고 재미있게 하고 있습니다!
레전드
오지은님 응원합니다.
배열포인터 선언할 때 int(*p) [5] 말고 int[5]* p 이렇게도 되나요?
안됩니다. 에러입니다.
컴파일러가 해석하지 못합니다.
@@양주종의코딩스쿨 넵 감사합니다!
8:42초에 전화옵니다 여러분 즐기세요!
따르릉 따르릉
선생님, int(*p)[5] = a; 에서 sizeof(p)를 하면 20바이트가 나오는건가요?
4가 나와야죠
p는 포인터변수에요
포인터변수는 자료형과 상관없이 4바이트다
혼동되면 돌아가서 복습하세요
@@양주종의코딩스쿨 감사합니다. 이렇게 빨리 답변해주실 줄 상상도 못했습니다.
아직 덧글 달아주시나요?!
네 😄
주변 소음이 조금 심해요
별도 마이크 없이 녹음하여
주변환경이 그대로 녹음되었습니다.
백색소음으로 이해해 주세요.
공부 즐겁게 하십시오.
@@양주종의코딩스쿨 ㅋㅋ 강의력만큼 유머감각도 좋으시네요
노이즈가..
ㅜㅜ 잡음만 좀 잡아주셨으면 ㅜㅜ
잡음 너 거기서!!
즐겁게 공부해 가세요.