2/3 C언어 10일차 왕초보 기초개념 전자계산기(전산기, computer) 구조를 알면 용어와 작동을 잘 이해할 수 있겠지만, 구조를 싫어하거나 이해가 어려운 사람들도 개념 설명과 각 순서와 각 표현의 통일을 하면 매우 쉬울 수 있다고 추측 변수 - 값을 변경할 수 있는 것, 이름이 변수라고 값은 수에 한정되지 않고 문자 등도 포함, 수학의 변수를 그대로 사용하는 것으로 추측 상수 - 값을 변경할 수 없는 것, 숫자나 문자나 무관, 변수를 상수화 가능 자료형 - 기억공간(memory) 절약을 위해 크기별로 자료 구분 문자형: 1 바잍, 정수형: 4바잍, 기타 정수형 실수형: 4 바잍, 이중 실수형: 8 바잍, 기타 실수형 주소 변수형: 운영체제 크기(처리 bit)에 따라 주소의 크기(길이) 다르므로 4 바잍, 8 바잍 결정 주소 - 공간의 첫주소(첫주소값)를 말하며 문자형 자료는 1 바잍이니 그 자체, 정수형 자료를 갖는 변수의 주소는 4 바잍의 첫주소가 전체 4 바잍의 공간을 의미, 이중 실수형 자료를 갖는 변수의 주소는 8 바잍의 첫주소가 전체 8 바잍의 공간을 의미, 표시 선언문 - 기계어로 번역하는 번역자(compiler)에게 미리 준비하게 정보 제공 1. 변수 선언시 기억공간 할당(확보, 지정)을 위해 자료형 제공 2. 함수 선언시 자료 갯수, 각 자료형, 반환 여부, 반환치의 자료형 제공 실행문 - 선언문에 명시한 자료형을 표시하지 않고 변수명 만 사용하며 순서대로 실행 반환(return) - 함수를 시작하면 운영체제가 제어권을 넘겨주어 실행하고 종료시 제어권을 반환( 반납) 그래서 return문 이후는 소용 없다고 함({['return을 만나면 종료'만 설명하고 제어권 미언급]}), 함수 종료후 해당 내용이 삭제되므로 결과치 필요시 반환가능 변수 선언(지정) - 기억공간 중 자료형 만큼 할당(확보, 지정) 변수명 - (할당된)공간, 공간명, 공간 시작위치, 공간 시작주소, 공간 시작주소값 공간 - 내용물(자료, 자료값)을 넣기 위한 상자, 용기, 방, 창고, 건물 참조 - 공간에 접근하여 내용물을 읽어오거나(복사) 변경(재할당?), 자료값에 의한 참조와 주소, 주소값, 공간에 의한 자료값을 간접참조(역참조) 중 주로 자료값 참조 사용 기억공간 구분 - 1. 문자영역(code area, text area) 실행절차문(code) 저장 2. 자료영역(data area) - 어디에서나 사용가능한 전역변수(global variables)와 해당 지역함수에서만 사용가능하지만 그 함수가 끝나도 보관하게 static 예약어(keyword)로 지정한 정적 변수(static variables)를 저장 3. 동적?영역(heap area) - 필요에 따라 기억공간을 생성, 소멸 등 제어가능 영역 4. 적재영역(stack area) - 함수들이 실행될 때 사용하는 해당 기억공간인 stack frame(적재구도, 적재틀)들을 저장 함수 - 작동, 실행 단위 매개변수 - 함수를 정의(설계)할 때 실행(동작)시 참여하는 요소들을 위해 설계시에만 대역으로 연기(자신은 결과치로 변하지 않으므로 '매개'란 용어라고 추측) 인자 - 함수 실행시 실제 참여하는 요소들, 입력시 매개변수와 명칭 달라도 되나 순서와 갯수는 일치 필요 반환문(return) - 종료를 알리기 위해 필요, 종료후 해당 내용은 모두 삭제 반환치(return value) - 실행 결과치를 전달해야 할 경우 하나만 반환, 2개 이상 반환 필요시 주소 변수 이용하여 간접참조로 가능 함수 실행 시작 - 함수 만의 기억공간(적재틀, stack frame)이 적재영역(stack area)에 할당되어 변수 등 인자 입력과 명령 수행 시작 함수 내에서 다른 함수를 불러오면(호출하면, call) 자신의 작동을 멈추고 그 함수를 실행하는데 이 때 소환된 함수를 위한 기억공간(적재틀, stack frame)이 자신의 기억공간 위에 할당됨(위에 쌓여서(적재되어) stack(stack된다)이라 표현) 함수 실행시 생성(할당)하는 작동을 push(밀어넣기), 종료시 소멸(제거)하는 작동을 pop(따내기)이라 부름 이런 방식으로 2차, 3차 등 여러 소환된 함수들이 자신들이 실행중에 다른 함수를 호출하면 main함수의 적재틀(stack frame)위에 소환함수1의 적재틀이 쌓이고, 그 위에 소환함수2의 적재틀이 쌓이는 식으로 계속 쌓이며 적재영역(stack area)의 용량을 차지하여 그 용량을 넘는 범람(overflow)이 생겨 전체 실행이 종료되는 등의 문제 발생 (초보라서 어떻게, 얼마나 용량지정할 수 있는지는 모름) 재귀함수 - 결과치를 찾기(계산하기) 위해 자신 내에서 자신을 불러(호출하여, 재귀의미인지 궁금) 위에 쌓고(적재하고, stack하여) 다른 인자(입력값)로 같은 기능으로 조건 만족할 때까지 계속 호출해서 실행하므로 호출(재귀) 횟수 많으면 적재기억공간을 넘칠 수도 있음 함수 종료 - 제어권 반환(return)하면 pop이란 작동으로 해당 함수 적재틀(stack frame)을 소멸(제거)하니 결과치가 필요시 같이 반환, 호출된 함수일 때 그 함수가 종료하여 제어권을 호출한 함수에게 반환(return)하면 위에 쌓인 그 소환(호출)된 함수의 적재틀을 제거 재귀함수 - 결과치를 찾기 위해 반복 생성시 적재틀(stack frame)이 계속 생기다가 결과치를 찾으면(계산하면) 종료하고 반환되어 이전 함수로 돌아가서(재귀) 그 반환된 결과치로 계산하여 해당 함수 결과치 반환하며 종료하는 식으로 적재틀(재귀함수)이 순차로 없어져서(쌓였다가 없어져) 호출(소환)한 함수가 이후 명령문들을 수행할 수 있음 적재영역(stack area)에서의 함수 생성시 함수별 적재틀(stack frame)이 점점 쌓여가므로 첫 틀(첫 함수, main함수)은 마지막 틀(소환된 함수)부터 제거돼야 마지막에 종료, 제거될 수 있음, 후입선출(LFIO : Last-In First -Out) : 최근에 들어온 단위가 먼저 나감 왕기초자들이 이렇게 개념 설정 위해서 설명없이 읽고 해당 사항 공부시 반복하면 배열, 포인터 설명이 가능 추측(정확도 등 별도) 정보통신 용어집을 검색했으나 못 찾아 임의 명명 2023년 8월 18일 금 21시44분 태평양 시간 2/3
와~비전공자인데 학원에서 배우고 이해가 잘 안되서 검색하다가 우연히 봤는데 그림까지 그려주시면서 설명해주시는데 비전공자가 봐도 이해가 아주 쉽게 되네요 헷갈려하는 부분을 너무 정확하게 잡아내주셔서 놀라울 뿐이네요 강의 듣다가 너무 감동받아서 댓글 답니다 ㅠㅠ 진짜진짜 최고이십니다!!!
진짜 이런 강의가 무료라니요.. 바로 구독했습니다.. 진짜 개념 안 잡혀서 며칠동안 울고싶은 심정이었는데.. 설명 진짜 미쳤습니다!!!! 제 선생님이 되어주셨어요!! 목소리도 예쁘시고 표정도 밝으셔서 강의에 엄청 집중이 잘돼요 선생님 강의는 독학러들에게 정말 많은 힘이 됩니다!! 적게 일하고 엄청 많이버세요!!❤
3/3 C언어 10일차 왕초보 기초개념 포인터 - 주소값을 저장하는 변수 포인터 선언 - 선언문에서 주소를 저장하는 변수와 같은 자료형 명시하고 별을 변수명 앞에 붙여 표시 사용 - 실행문 내에서는 별표 없이 변수명 만 사용(일반 변수들을 선언문에서 자료형 지정하고 실행문에서 변수명 만 사용과 동일) 주소 - 공간의 첫주소(첫주소값)를 말하며 문자형 자료는 1 바잍이니 그 자체, 정수형 자료를 갖는 변수의 주소는 4 바잍의 첫주소가 전체 4 바잍의 공간을 의미, 이중 실수형 자료를 갖는 변수의 주소는 8 바잍의 첫주소가 전체 8 바잍의 공간을 의미, 표시 int exp_a; int * exp_a_p; exp_a = 12; exp_a_p = &exp_a; 변수 주소 - 주소 연산한(주소 연산자&를 붙인) &exp_a 1. 자료값(내용물) - 변수에 대입된 자료 2. 연산 결과 - (자료가 담긴) 해당 변수의 (기억공간의) 주소 3. 연산 목적 - 주소를 통해 해당 자료형의 공간 표시 포인터 exp_a_p 1. 자료값(내용물) - 가리키는(지시, 지적하는, pointing) 해당 자료형 자료의 시작 주소, 첫주소 2. 목적 - 가리킨(지시한, 지적한, pointing) 주소를 통해 기억공간(대상, 목적물)을 간접참조하여 자료를 복사하거나 변경 3. 조건 - 간접참조가 목적이므로 지적한 변수와 자료형이 일치 필요 가르킴, 지시, 지적, pointing = 주소, 주소값 저장(보유) 가르키는 것, 지적 대상은 목적에 따라 자료, 자료값이기도 하고 공간이기도 함 1. 지적된 해당 자료형의 변수에 저장된 자료값을 참조(복사)하려면 실행문 우변에 위치하여 참조 연산자 별을 붙여 지적하는 주소에(를 통해) 접근하여 자료값을 간접참조(복사) 2. 지적된 해당 자료형의 변수의 공간에 접근하여 자료를 참조(변경, 재할당?)하려면 실행문 좌변에 위치하여 참조 연산자 별을 붙여 지적하는 주소인(주소를 통해) 공간에 접근하여 자료값을 간접참조(변경)
대상에 접근하여 참조(사용)하기 위해 참조 연산자 별 표시 직접참조: 변수에 접근하여 자료값을 읽거나(복사하거나) 변경 간접참조: 변수의 주소를 통해 자료값을 복사하거나 변경 배열명 - 배열의 첫주소인 상수 역할 구분 int * pa = &a; 선언시 선언문에 변수 a의 주소를 포인터 변수 pa에 저장 포인터 변수 pa가 a의 주소 &a를 저장하고 있으므로 pa == &a *pa는 a의 주소 &a를 통해 참조한 a의 자료값이므로 *pa == *&a == a &pa는 포인터 변수 pa 자체의 주소, 다중 포인터에서 사용 scanf에서 입력받아 변수 a에 직접 저장할 수 없어 그 주소 &a를 통해 넣음 종료 2023년 8월 18일 금 21시44분 태평양 시간 3/3
대학원 연구분야가 인공지능과 관련되어서 주로 Python으로만 코딩하다가, C언어 조교를 담당하게 되어서 C언어를 공부하는데, 매번 포인터에 막혀서 걱정되었습니다. 그런데 단번에 이해 할 수 있도록 가르쳐주신다는게 정말 놀랍습니다. C언어를 어려워하는 1~2학년들에게 적극적으로 강사님의 영상을 추천하도록 하겠습니다. 앞으로도 좋은 강의 부탁드립니다!
안녕하세요. 감사히 잘 봤어요. 엉뚱하게 포인터 덕분에 C언어에 입문한 파이선 초보자에요 . 2주 전부터 포인터가 어렵다는 영상들이 연결되어 궁금해서 여러 영상 봤더니 처음부터 재미있어서, 기초설명 영상 보니 많은 부분이 파이선과 겹치고, PLC 제어영상 보고 지난 7일부터 C언어를 배우게 됐어요. 8일 전에 대학 1학기 과정에 연결되어 2일 동안 정말 재미있게 문법 공부해서 수박겉핧기 마치고, 지체하면 그나마 적은 지식이라도 잊으니 파이선도 천천히 열심히 공부하고 있어요. 요즘 일주일간 일 없으면 하루종일 C언어가 아주, 매우, 무척 재미있어서 자는 시간, 운전 시간이 아까울 정도로 열심히 공부해서 나름 개념 파악 다하고 문법은 거의 익혔어요. 작년에 빝코인 자동거래 하려고 대충 파이선 배워 시도하다가 일하느라 방치했더니 다 잊어서 2달 전부터 열심히 해서 재귀함수 알듯말듯하고 거의 다 복습하고 반복중이었는데, C언어에 눌려서 어쩌다 파이선 참조하려 VS Code 켜면 아무 생각이 안나서 정리한 파일 찾아서 새로운 것 보는 듯해요. C언어 코드가 더 친숙해졌어요. 자료형 선언하는 등 복잡하다고 들었는데 더 재미있어요. 문법을 다 기억하지 못하지만 정확하게 개념을 이해했는지 모르지만 개념은 전혀 어려운적이 없어요. 전공자들이 어려워한다는 것이 이해가 안돼요. 우선 어느 영상에서 2시간 과제 말씀하신대로 안보고 쉬운 예제들을 풀 정도는 돼야겠지요. 재귀함수도 확실히 이해했어요. C언어 덕분이에요. 구조체도 파이선 클래스 개념 나름대로 이해해서 객체 개념도 중요하지만 단어 의미대로 목적도 중요하다고 이해하고 있어요. 목적을 갖고 객체를 만드는 거지요. 물건 만들 때 목적이 있으니 당연하게 포함된 개념이지만 중점을 둔다는 말이지요. 파이선은 self로 C++은 this라고 들었는데 이것도 처음에는 왜 자신이라고 했나 self는 기본이고 다른 인자를 받아 두개 인자에서 self와 인자가 합쳐져서 하나로 되는 이유를 모르고 따라하면 맞으니 그러려니 하고 썼는데, 어느 날 self가 만들어지는 객체라는 것을 깨달았어요. 빵틀이던 설계도에서 누구 빵인지 어떤 빵인지 정할 수가 없으니 이름 쓸 공간을 마련한 거에요. 만들 때 그 이름으로 물건(객체) 이름이 되고, 객체와 관련된 인자는 자신과 연결되어 self.xxx 되지만 무관하면 별도 변수가 되지요. 문제는 처리절차 = 알고리즘이 어렵겠지요. 이제라도 재미붙어서 열심히 하고 있어요. 이렇게 재미있는 줄 알았다면 30년전에 장난삼아 리눅스 깔았다지웠다 놀 때 했다면 하는 생각이 드네요. 그때는 막연히 어렵다고 생각해서 시도도 못했어요. 복잡하고 세밀한 조정을 좋아해서 도움이 되는 점도 있는 것 같아요. 수리할 때도 가정용 냉방기는 간단해서 재미없고 제어장치 많이 붙은 큰 상업용 냉방, 냉동기가 재미있어요. 이 영상도 10일전 경에 봤고 좋아요 눌려져 있네요. 현재 반복하는 C언어 영상들 끝나면 '독하게 시작하는 C 제1장 C 프로그래밍 입문 - 첫 번째' 봤는데 가입해서 공부할 예정이에요. 어느 정도인지 매우 궁금하네요. 요즘 파이선은 뒷전이고 C언어에 푹 빠졌어요. 이런 날도 오네요. 아래 글은 제가 10일 동안 처음 C언어를 배우면서 느끼고 이해한 기초 개념들이에요. 저는 파이선도 초보이고 아직 알고리듬은 시작도 못하고 몇 예제에서 어려운 것은 느꼈어도, 포인터 첫 영상부터 어려운 것 없었고 포인터 연산도 당연히 자료형 맞추어 다음 자리 찾는 것이 쉬웠었는데, 전공자들도 당시 이해 못해서 개발을 포기했다는 여러 댓글들 보면서 포인터 뿐만 아니라 일반적인 공부방법에서 기초적인 부분들의 이해가 안 돼서인가 의아하여 시간을 내서 썼어요. 몇 블로그를 참조했으나 왕초보의 이해수준이고 이 수준의 상태를 알려드리고 더 이해 못 하는 분들에게 도움이 될까하여 글 올리니 수정 보완을 해 주시면 감사하겠고 무시하셔도 됩니다. 육하원칙 - 1. 언제: 순서 2. 어디서: 식별자 등 표시 위치 3, 4. 누가 무엇을: 문장이나 함수 등에서 주체와 객체, 혹 손님, 행인 등 5. 어떻게: 같은 표식도 표시자(Punctuator)나 연산자(operator) 역할 등 6. 왜: 지정, 정의된 이유나 역할, 목적 등을 다시 설명하거나 실행절차 등을 설명 ({[초보 특히 왕초보시에는 어떤 것을 몇분도 아닌 지금 막 듣고도 생각이 안나거나, 다른 것과 혼동되거나, 자신만의 엉뚱한 추측, 상상, 연결, 대입하거나, 갑과 을을 바꿔서 알아 듣거나, 순서를 바꾸거나, 비슷하거나 많이 달라도 같다고 하는 등으로 딴 소리하고, 심지어 맞는 말을 하면서 틀리다고 하거나 모른다고 하거나, 본인이 뭘 모르는지 혼동하는지 모르니 확인해 가시면서 답답해도 계속 반복해 주셔야 해요. 오죽하면 낫 놓고 기역 자 모른다, 쥐어줘도 모른다 고 하겠어요. 알기까지, 알게 되기까지의 과정과 시간이 필요한가 봐요.]}) 학습자들은 누구나 스스로 곡해, 변경, 추측해서 오해하거나 모르겠다고 하는 경우들이 있는데 이를 줄이는게 중요하고, 작은 차이를 알아내고 그에 맞게 적용해야 하지요. 해당 내용을 건성으로 시청하거나 읽고서 모르는 부분을 재시청하여 확인도 안 하고 질문을 올리는 무성의와 남의 생명인 시간을 허비하게하는 악행도 없애야 합니다. 그후에 확인이나 하는지 답답해요. 2023년 8월 18일 금 21시44분 태평양 시간 1/3
와👍👍👍 이렇게 열정적이고 열심히 하시는 분이라니!!! 이 자세로 뭘 한들 실패 하겠습니까??? 당연한 수순으로 좋은 결과를 얻으실 거 같아요. 올려주신 정리 내용은 잘 봤습니다. 배운 내용을 이렇게 정리 하시려면 상당한 이해가 필요한 부분인데 잘 하신 거 같아요:) 긴 영상들 끝까지 들어 주서서 감사합니다🙏
안녕하세요. 감사히 잘 봤어요. 파이선 초보자인데 포인터가 어렵다고 영상들이 연결되어 궁금해서 여러개 보니 매우, 아주, 무척 재미있어서 결국 C언어를 공부하게 됐어요. 대학 1학기 과정이 연결되어 2일만에 개략을 보았는데 정말 흥미진진했어요. 이렇게 재미있는 줄 알았다면 30년전에 장난삼아 리눅스 깔았다지웠다 놀 때 했다면 하는 생각이 드네요. 이제라도 재미붙어서 열심히 하고 있어요. 초보자가 본 포인터 난해설은 선언문에서 별을 붙여 지시자, 지적자로 지정하고는 실행문에서는 별을 떼고 일반 변수처럼 문자만 있으니 헛갈리는 첫걸음, 지름길이에요. 그리고는 갑자기 별을 다시 붙이고 자신, 지시자, 지적자의 값을 찾아오는게 아니라 지적한 곳의 값을 찾아온다니 헛갈릴 수 있지요. 그런데 위 부분은 정말 처음 듣는 이들이 혼동되어야지 두세번은 짧은지 모르겠는데 관심갖고 자세히 보면 전혀 어렵지 않지요. 달 가르키는 손가락만 보며 달 찾으니 보이나요? 막연한 추측은 실행문에서도 계속 별 붙이고, 참조시에 별을 두개 붙이면 번잡해 보여서 그랬나 하는 생각이 들었어요. 말씀하신 대로 누구나 스스로 곡해, 변경, 추측해서 오해하거나 모르겠다고 하는 경우들이 있는데 이를 줄이는게 중요하고, 작은 차이를 알아내고 그에 맞게 적용해야 하지요. 2023년 8월 14일 월 03시52분 태평양 시간
포인터는 일반 변수명과 달리 컴파일때는 아무값도 특정할수 없고 오직 메모리에 적재된 이후에야 결정될수 있어서 포인터 접근은 결국 운영체제의 지원까지 필요할것이며 CPU부터 지원하고 있습니다. 실제로 CPU 명령셋중에는 포인터 조작에 직접 관여되는 특별한 명령어가 준비돼 있는데 그래서 포인터가 결코 쉽지않은거는 맞아요
거의 신의역역에 들어간 강의 입니다. 파이썬 문법 보고 C보려고 들어왔는데.. 놀랍습니다. 파이썬에서 변수의 의미를 이해했는데... 변수는 그냥 이름이다. 메모리번지를 사용하면 코딩하기 너무 힘들어서 변수라는 이름,레이블을 만들어서 인터프리터나 컴파일러가 변수를 주소로 바꿔서 해석하게 한다. 즉 변수는 데이타가 있는 (데이타를 할당한 메모리의 주소)를 바이딩 하고 있다.라고 이해하면서 변수는 프로그래머가 식별하기 위해 만든 임시적인 이름이고 인터프리터나 컴파일러가 그것을 활용해서 기계어로 만들어 실행하는것이다. 그러면 변수이름, 함수이름, 리스트이름,클래스이름,객체이름 도 모두 메모리에 할당된 어떤 시작 주소를 바인딩 하고 있는것이고 실제 컴파일러는 그 주소에서 데이타나 코드를 가져와서 기계어로 만들어 실행파일을 만드는것이다. 즉 프로그래머가 메모리상의 위치를 숫자로 기억하기 힘들어서 만든 이름표 인 뿐인것이다. 변수는 컴파일러가 그 내용을 참조하고 포인터 변수는 컴파일러가 포인트변수가 가리키는 변수의 주소, 변수명이 바인딩하고 있는 그 주소 를 참조하고 그 내용을 참조할때에는 역참조라는 약속을 해서 내용을 참조하게 한다. 자료형은 메모리에 할당된 데이타의 저장 공간을 정하는 것이다. 그래서 어떤 변수의 자료형은 그 변수가 그 자료형이 할당되어 있는 메모리의 첫번지를 바인딩하고 그 공간의 크기를 정해준다. 포인터 변수가 어떤 변수를 가리킬때에는 그 변수가 바인딩하는 주소를 가리키지만 그 주소에서 시작하여 얼마만큼의 크기가 할당되어 있는지를 판별하는 기준으로 포인터 변수가 가르키는 변수의 자료형과 동일한 자료형으로 선언해야한다. 중간에 강의를 들으면서 이해가 되지 않았던 부분이 이해가 되었습니다. 강의 들으면서 들었던 의문은 만약 1byte의 숫자 자료형을 가진 변수라면 10진수로 0에서 2의 8승-1 이므로 0~63까지의 숫자를 표현할 수 있고 0에서 ~63까지의 숫자를 넣을 수 있는 공간은 1byte 면 되므로 그 변수의 주소를 저장하는 공간은 1bit면 되기 때문에 포인터 변수의 자료형은 1bit 자료형이면 된다고 생각했기 때문입니다. 이처럼 생각하면 포인터 즉 주소를 저장하는 변수는 자료형/1byte 의 자료형이면 된다고 생각했는데... 역참조. 포인터가 가리키는 주소(시작주소, 변수 바인딩하고있는 주소)의 내용을 참조할려면 포인터가 담을 수 있는 주소공간이 아니라 그 내용 공간의 크기가 같아야 온전하게 역참조 할 수있음을 이해하게 되엇습니다. 겸사겸사 쌩뚱맞게 자격증을 준비때문에 프로그래밍 공부를 해야할 일이 생겨서 여기 저기 둘러보다가 포인터 강의 듣게 되었는데 정말 너무 너무 알뜰 살뜰 잘 챙겨주셔셔 감사드립니다. 꾸벅~ 잊어 버리기 전에 다시 주기적으로 반복해야할것 같다는 생각이 듭니다. >.< 1주일째 프로그래밍 공부중인 어느 바보가.. 다시 한번 감사인사 드립니다.
포인터 강의만 몇번 들었더니 큰 도움이 됐습니다. 초보자 입장에서 파이썬 문법을 공부해봤던 사람 입장에서 포인터는 정말 왜 있지? 왜 쓰지? 같은 느낌이였는데, 강의 듣고 왜 쓰는지 조금은 이해가 된거같습니다. 제가 이해한것중에 가장 큰 이유는 함수를 호출해서 사용하고, 리턴값으로 여러개를 받고 싶을때가 가장 유용한거같습니다. 그리고 그냥 문자열 편하게 저장할때.. 사실 더블포인터 부분이 아직 좀 이해가 안되는 부분이 있는데, 어떤 분 강의를 들으니 그냥 이차원 배열 쓰고 싶을때 쓴다고 생각하라고 하더라고요. 선생님께서는 더블포인터는 어떤 상황에 주로 쓴다고 생각하세요? 저는 그냥 포인터 주소 저장하려고 이차원 배열 쓴다만 기억나서요..
포인터에 저장된 주소 값을 외부 함수에서 변경하려면 더블 포인터가 필요합니다. 개인적으론 이차원 배열이 필요한 경우에 그 크기가 가변적이라면 포인터 배열을 사용해서 동적할당 받습니다. 이차원 배열보다 사용하긴 어렵지만, 메모리를 효율적으로 쓸 수 있다는 장점이 있습니다. 질문하신 내용을 보니 굉장히 열심히 공부하고 계신거 같네요. 👍 개인적인 의견으론…문법 공부 하실 때 그 쓰임에 관해 너무~~깊게 고민 하시는 건 걸림돌이 된다고 생각합니다. 다양한 예제들을 코딩하다 보면 받드시 필요로 하는 문법들이 생기게 되고 그를 바탕으로 이해 하시는 게 더 큰 도움이 된다고 생각합니다. 짧은 예제로 그 문법의 필요를 이해 하시엔 너무 큰 어려움이 있기 때문 입니다. 문법적으로 어느 정도 이해 되셨다면 관련 예제들을 꼭 플어 보시길 권장합니디. 그럼!!! 앞으로도 즐코하세요!! 배고프지 않게 밥 꼭 챙겨 드시고용:)
포인터는 가리키는 메모리의 시작주소만 알고 있어서 역참조시에 그 저장공간 전부를 읽으려면 그 크기를 알아야 하니까 포인터 선언 할 때도 자료형을 써줘야 하는 것이다. 까지는 이해를 했습니다. 그런데 같은 4바이트라도 float과 int형을 구별해서 써줘야 하는 걸로 아는데요, 이것의 이유는 뭔가요?
이중포인터 ruclips.net/video/C995oY8JGzs/видео.htmlsi=F-Y1gyGrkir4zabc 포인터 배열 ruclips.net/video/TKBScOrESyo/видео.htmlsi=6oSQ-py1pqxgshZ8 포인터 배열과 이증 포인터 ruclips.net/video/jilSWvri33g/видео.htmlsi=EEJH0pg8BsVAwfWV 3개의 강의를 듣고 이해가 되면 풀 수 있는 문제입니다:)
진짜 너무너무너무너무 잘가르치세요ㅜㅜㅜㅜㅜㅜㅜ언니최고
ㅋㅋㅋㅋㅋㅋㅋㅋ고마웡 동생~😍
와 역참조랑 포인터 구분도 못하고 공부하다 막혀 다시 개념잡으면서 공부중인데 깨달음을 얻고 갑니다. ..
와우👍👍👍 축하드려용~
17:11 진짜 제가 왜이렇게 포인터를 헷갈려하나 싶었는데... 구원받은 느낌입니다
ㅋㅋㅋㅋㅋㅋ 와 구원이래 ㅋㅋㅋㅋㅋ
설명이 아주 명쾌합니다. 포인터로 고민하는 자들은 이 강의 하나로 끝!
ㅋㅋㅋㅋ 넘넘 감사드려용😊 잘 이해 하신거 같아 저도 기쁘네용~
20:43 최곱니다 선생님...
너무 감사합니다😊
선생님 정말 감사합니다. 요즘 다른 유튜버들이 다 PPT나 컴퓨터화면을 사용하는데 화이트 보드에 해주셔서 너무 감사드려요. (진짜로 강의실에서 수업을 듣는거 같거든요)
지식을 나누어 주셔서 정말 감사드립니다.
ㅎㅎㅎㅎㅎ 좋게 봐주셔서 감사합니다:)
17:40 정말 궁금했던건데 가르쳐주셔서 감사합니다.
ㅎㅎㅎㅎ 다행이네요^^ 감사합니다~😊
선생님 공부하다가 막힌 부분이 있는데 나중에 시간 나실때 한번만 봐주시면 감사하겠습니다 ㅜㅜ
char *p = "KOREA";
char *p = "KOREA"; 포인터 변수는 주소를 담는 그릇이라고 배웠는데 왜 문자열을 담고 있는지 여쭤봐도 될까요 ㅜㅜ?
믄자열은 내부적으로 주소로 처리됩니다.
ruclips.net/p/PLrj92cHmwIMfCByJxancmHq1LVKHNpIen&si=jJL6zGlBZxVyKzaK
@@withhoneyc 감사합니다 :) !!
제가 본 포인터 강의중에 가장 이해 잘 가고 쉽게 설명 해주시네요ㅎㅎ, 참고하겠습니다 고맙습니다 ~!
코카콜라같은 칭찬 감사합니다😊
계속해서 좋은 강의 많이 만들어주세요! 설명 너무 깔끔합니다.
힘이되는 댓글 감사합니다😊 열심히해볼께요!!!
정말 너무 잘 가르치십니다. 눈물을 흘리며 자리에서 일어나 박수치는 중 입니다.
와 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 진심 넘 웃겨요!!!🤪
포인터 개념이 명확하지 않아 어려웠던 부분들이 깔끔하게 해결되는 느낌이에요 좋은 강의 감사합니다^^
와우! 깔끔하게 정리됐다니 너무 좋네용😊
진짜 군더더기 하나 없고 완벽한 강의가 맞네요 헷갈리기 쉬운부분도 콕콕 찝어주시고 너무 감사드립니다.
좋게 들어주셔서 저도 너무 감사합니다~:)
2/3 C언어 10일차 왕초보 기초개념
전자계산기(전산기, computer) 구조를 알면 용어와 작동을 잘 이해할 수 있겠지만, 구조를 싫어하거나 이해가 어려운 사람들도 개념 설명과 각 순서와 각 표현의 통일을 하면 매우 쉬울 수 있다고 추측
변수 - 값을 변경할 수 있는 것, 이름이 변수라고 값은 수에 한정되지 않고 문자 등도 포함, 수학의 변수를 그대로 사용하는 것으로 추측
상수 - 값을 변경할 수 없는 것, 숫자나 문자나 무관, 변수를 상수화 가능
자료형 - 기억공간(memory) 절약을 위해 크기별로 자료 구분
문자형: 1 바잍,
정수형: 4바잍, 기타 정수형
실수형: 4 바잍, 이중 실수형: 8 바잍, 기타 실수형
주소 변수형: 운영체제 크기(처리 bit)에 따라 주소의 크기(길이) 다르므로 4 바잍, 8 바잍 결정
주소 - 공간의 첫주소(첫주소값)를 말하며 문자형 자료는 1 바잍이니 그 자체, 정수형 자료를 갖는 변수의 주소는 4 바잍의 첫주소가 전체 4 바잍의 공간을 의미, 이중 실수형 자료를 갖는 변수의 주소는 8 바잍의 첫주소가 전체 8 바잍의 공간을 의미, 표시
선언문 - 기계어로 번역하는 번역자(compiler)에게 미리 준비하게 정보 제공
1. 변수 선언시 기억공간 할당(확보, 지정)을 위해 자료형 제공
2. 함수 선언시 자료 갯수, 각 자료형, 반환 여부, 반환치의 자료형 제공
실행문 - 선언문에 명시한 자료형을 표시하지 않고 변수명 만 사용하며 순서대로 실행
반환(return) - 함수를 시작하면 운영체제가 제어권을 넘겨주어 실행하고 종료시 제어권을 반환( 반납) 그래서 return문 이후는 소용 없다고 함({['return을 만나면 종료'만 설명하고 제어권 미언급]}), 함수 종료후 해당 내용이 삭제되므로 결과치 필요시 반환가능
변수 선언(지정) - 기억공간 중 자료형 만큼 할당(확보, 지정)
변수명 - (할당된)공간, 공간명, 공간 시작위치, 공간 시작주소, 공간 시작주소값
공간 - 내용물(자료, 자료값)을 넣기 위한 상자, 용기, 방, 창고, 건물
참조 - 공간에 접근하여 내용물을 읽어오거나(복사) 변경(재할당?), 자료값에 의한 참조와 주소, 주소값, 공간에 의한 자료값을 간접참조(역참조) 중 주로 자료값 참조 사용
기억공간 구분 -
1. 문자영역(code area, text area) 실행절차문(code) 저장
2. 자료영역(data area) - 어디에서나 사용가능한 전역변수(global variables)와 해당 지역함수에서만 사용가능하지만 그 함수가 끝나도 보관하게 static 예약어(keyword)로 지정한 정적 변수(static variables)를 저장
3. 동적?영역(heap area) - 필요에 따라 기억공간을 생성, 소멸 등 제어가능 영역
4. 적재영역(stack area) - 함수들이 실행될 때 사용하는 해당 기억공간인 stack frame(적재구도, 적재틀)들을 저장
함수 - 작동, 실행 단위
매개변수 - 함수를 정의(설계)할 때 실행(동작)시 참여하는 요소들을 위해 설계시에만 대역으로 연기(자신은 결과치로 변하지 않으므로 '매개'란 용어라고 추측)
인자 - 함수 실행시 실제 참여하는 요소들, 입력시 매개변수와 명칭 달라도 되나 순서와 갯수는 일치 필요
반환문(return) - 종료를 알리기 위해 필요, 종료후 해당 내용은 모두 삭제
반환치(return value) - 실행 결과치를 전달해야 할 경우 하나만 반환, 2개 이상 반환 필요시 주소 변수 이용하여 간접참조로 가능
함수 실행 시작 - 함수 만의 기억공간(적재틀, stack frame)이 적재영역(stack area)에 할당되어 변수 등 인자 입력과 명령 수행 시작
함수 내에서 다른 함수를 불러오면(호출하면, call) 자신의 작동을 멈추고 그 함수를 실행하는데 이 때 소환된 함수를 위한 기억공간(적재틀, stack frame)이 자신의 기억공간 위에 할당됨(위에 쌓여서(적재되어) stack(stack된다)이라 표현)
함수 실행시 생성(할당)하는 작동을 push(밀어넣기), 종료시 소멸(제거)하는 작동을 pop(따내기)이라 부름
이런 방식으로 2차, 3차 등 여러 소환된 함수들이 자신들이 실행중에 다른 함수를 호출하면 main함수의 적재틀(stack frame)위에 소환함수1의 적재틀이 쌓이고, 그 위에 소환함수2의 적재틀이 쌓이는 식으로 계속 쌓이며 적재영역(stack area)의 용량을 차지하여 그 용량을 넘는 범람(overflow)이 생겨 전체 실행이 종료되는 등의 문제 발생
(초보라서 어떻게, 얼마나 용량지정할 수 있는지는 모름)
재귀함수 - 결과치를 찾기(계산하기) 위해 자신 내에서 자신을 불러(호출하여, 재귀의미인지 궁금) 위에 쌓고(적재하고, stack하여) 다른 인자(입력값)로 같은 기능으로 조건 만족할 때까지 계속 호출해서 실행하므로 호출(재귀) 횟수 많으면 적재기억공간을 넘칠 수도 있음
함수 종료 - 제어권 반환(return)하면 pop이란 작동으로 해당 함수 적재틀(stack frame)을 소멸(제거)하니 결과치가 필요시 같이 반환, 호출된 함수일 때 그 함수가 종료하여 제어권을 호출한 함수에게 반환(return)하면 위에 쌓인 그 소환(호출)된 함수의 적재틀을 제거
재귀함수 - 결과치를 찾기 위해 반복 생성시 적재틀(stack frame)이 계속 생기다가 결과치를 찾으면(계산하면) 종료하고 반환되어 이전 함수로 돌아가서(재귀) 그 반환된 결과치로 계산하여 해당 함수 결과치 반환하며 종료하는 식으로 적재틀(재귀함수)이 순차로 없어져서(쌓였다가 없어져) 호출(소환)한 함수가 이후 명령문들을 수행할 수 있음
적재영역(stack area)에서의 함수 생성시 함수별 적재틀(stack frame)이 점점 쌓여가므로 첫 틀(첫 함수, main함수)은 마지막 틀(소환된 함수)부터 제거돼야 마지막에 종료, 제거될 수 있음, 후입선출(LFIO : Last-In First -Out) : 최근에 들어온 단위가 먼저 나감
왕기초자들이 이렇게 개념 설정 위해서 설명없이 읽고 해당 사항 공부시 반복하면 배열, 포인터 설명이 가능 추측(정확도 등 별도)
정보통신 용어집을 검색했으나 못 찾아 임의 명명
2023년 8월 18일 금 21시44분 태평양 시간 2/3
정말… 설명 너무나 잘해주셔서 감사합니다
독학으로 공부 중인데 도무지 이해 못했다가 영상으로 이해했네요
좋은 강의 다시 한번 감사합니다~~~!!
도움이 되신다니 저도 넘 기뻐용😊
홧팅입니다!!!
사이다 강의 듣고 구독 눌러버렸습니다..
흐흐흐흫흐 잘하셨습니다👍👍👍
대박 포인터 문제만 보면 헷갈려서 강의를 몇개 들었는데 드디어 이해됐어요 귀에 쏙쏙 들어와요ㅠ 감사합니다
저도 감사 드립니다🙏🙏🙏
와 제가 선언따로 초기화따로할때 *p하고 p가 헷갈려서 이거 들어본건데 명확하게 이해가 되네요..
저희 전공 교수님이 되어주세요..
ㅎㅎㅎㅎ 그 부분을 많이들 헷갈려 하시더라구요^^ 이해가 되셨다니 기쁘네용😊
와~비전공자인데 학원에서 배우고 이해가 잘 안되서 검색하다가 우연히 봤는데
그림까지 그려주시면서 설명해주시는데 비전공자가 봐도 이해가 아주 쉽게 되네요
헷갈려하는 부분을 너무 정확하게 잡아내주셔서 놀라울 뿐이네요
강의 듣다가 너무 감동받아서 댓글 답니다 ㅠㅠ
진짜진짜 최고이십니다!!!
잘 이해 되셨다니 저도 넘 좋네요😊 앞으로도 자주 찾아와 주세용~
오늘도 깔끔한 설명에 감탄하고 갑니다~~ 군더더기 없는 명쾌한 강의네요
과찬이십니다! 정말 감사합니다😊
진짜 이런 강의가 무료라니요.. 바로 구독했습니다.. 진짜 개념 안 잡혀서 며칠동안 울고싶은 심정이었는데.. 설명 진짜 미쳤습니다!!!! 제 선생님이 되어주셨어요!! 목소리도 예쁘시고 표정도 밝으셔서 강의에 엄청 집중이 잘돼요 선생님 강의는 독학러들에게 정말 많은 힘이 됩니다!! 적게 일하고 엄청 많이버세요!!❤
ㅎㅎㅎㅎ 너무너무 감사합니다~🤗
적게 일하고 많이 벌라는 말을 아로새길게용!:D
자료구조 때문에라도 포인터 마스터 하려고 들어요 감사합니다!
응원하겠습니다👍👍👍
포인터보고 꺾인 마음 치유하고 갑니다…
설명 너무 잘하시네요
감사합니다!!
치유라니^^ 넘 기분 좋네용😊
정말 놀랍습니다. 좋은 강의 감사합니다.
저도 감사합니당😊
와.. 메모리주소블록까지 그려서 설명해주셔서 제대로 이해했습니다
와우👍👍👍
예시를 원리로 들어서 설명해주는거 진짜 최곱니다. 또 핵심포인트가 나오면 톤부터 달라지니까 어디부분을 중요하게 말씀하려고 하는지도 딱 바로 와닿네요. 정주행 하겠습니다. 좋은강의 정말 감사합니다.
와 이렇게나 좋게 봐주셔서 정말 감사합니다😊
대박 강의입니다. 정말 감사합니다 !!
저도 감사드립니다~😊
너무너무 이해가 잘가도록 설명 하십니다. 감사 합니다... ^^
이해가 잘되신다니~저도 넘 기뻐용~😊
억양이나 말의 속도까지 그 어떤 강의나 유튜브 영상보다도 귀에 쏙쏙 들어오고 이해하기 쉽게 설명해주시네요
난해하던 개념이 영상을 통해서 한 번에 정립이 됐습니다 감사합니다!
너무 감사드려용~더 열심히 준비해보겠습니다!😊
와 진짜 댓글 처음 달아보네요 한달 동안 이해 안되던 개념 바로 이해 되었습니다. 감사합니다 유튜브 정독할게요 ㅠㅠ
감사합니다🙏 이해가 되신다니 저도 정말 기뻐요!!! 응원하겠습니다:)
진짜 최고의 강의.
다른 강의 보다가 포기하고 싶었는데 우연히 봤는데 진짜 최고네요. 감사합니다 정말
이해가 잘 되신다니 너무 좋네요~🤗
앞으로도 자주 찾아와 주세용~
@@withhoneyc 다 보려구요 ㅎㅎ
너무 명료하네요! 감사합니다❤
네~저도 감사합니다~😊
선생님.. 증말 설명이 너무 깔끔해여.. 이 채널이 나올때까지 기다렸다가 쉽게 이해하려고 제가 여태 프로그래밍 공부를 미룬 것 같습니다;; 재귀함수 부분도 그렇고 메모리랑 구현적인 부분들을 그림으로 같이 설명해주셔서 넘 좋아여. 비전공자인데 정말 도움 많이 됩니다!!!
어멋!!! 이렇게나 감동적인 댓글이라니요😊
정말 감사드립니다~
명강의 입니다~
소프트웨어 엔지니어로 일하고 있는 청년입니다. 회사에서 C++,C# 코딩 능력을 요구해서 공부하고 있는데 , 많은 도움 받고 있습니다! 감사합니다:)
도움이 되신다니 저도 너무 기쁘네용~🤗
더 열심히 해보겠습니다!
정말 대단합니다 선생님!!!!!!!
선생님 덕분에 제 수명이 1년 늘어났습니다.
감사합니다.🥳
ㅋㅋㅋㅋㅋㅋㅋ 현석님 더 많은 수면 연장을 위해 제가 더 노력해보겠습니다!!!😊
명강의 이십니다. 감사합니다!
저도 감사합니다~😊
너무 좋은 개념강의네요
발음이 명확해서 배속 재생해도 잘들립니다 감사해요😊
이히히~응원해 주셔서 감사합니다~🙏
포인터 강의 여러개 봤는데 이 강의가 최고네요. 업무하면서도 제대로 이해 못하고 사용하고 있었는데 선생님 설명들으니 이해가 쏙쏙돼요. 정말 감사합니다:)
이해가 되신다니 정말 기쁘네용!!! 앞으로도 자주 찾아와주세용😊
최곱니다 이런 강의가 필요했어요😊
ㅎㅎㅎㅎ 도움이 되신다니 넘~좋네용~😊
포인터 개념이 헷갈렸는데 이렇게 깔끔하게 정리해서 설명해 주시니 한 번에 이해됐네요 ㅠㅠ 감사합니다
포인터 개념 한번에 이해하기 어려운데^^ 정말 다행이예요~
감사합니다~:D
와. 선생님. 최고세요. 학교에서 수업들으면서 궁금하고 약간 모호했던 부분이 이었는데, 깔끔하게 설명 해주셔서 이해가 너무 쉽게 잘돼요.
제 강의가 도움이 되셨다니 기쁘네용~
자주 찾아와주세용~
선생님! 좋은강의 정말 감사드립니다! 덕분에 개념확실히 잡고갑니다!!!
와우! 축하드려용😊
3/3 C언어 10일차 왕초보 기초개념
포인터 - 주소값을 저장하는 변수
포인터 선언 - 선언문에서 주소를 저장하는 변수와 같은 자료형 명시하고 별을 변수명 앞에 붙여 표시
사용 - 실행문 내에서는 별표 없이 변수명 만 사용(일반 변수들을 선언문에서 자료형 지정하고 실행문에서 변수명 만 사용과 동일)
주소 - 공간의 첫주소(첫주소값)를 말하며 문자형 자료는 1 바잍이니 그 자체, 정수형 자료를 갖는 변수의 주소는 4 바잍의 첫주소가 전체 4 바잍의 공간을 의미, 이중 실수형 자료를 갖는 변수의 주소는 8 바잍의 첫주소가 전체 8 바잍의 공간을 의미, 표시
int exp_a;
int * exp_a_p;
exp_a = 12;
exp_a_p = &exp_a;
변수 주소 - 주소 연산한(주소 연산자&를 붙인) &exp_a
1. 자료값(내용물) - 변수에 대입된 자료
2. 연산 결과 - (자료가 담긴) 해당 변수의 (기억공간의) 주소
3. 연산 목적 - 주소를 통해 해당 자료형의 공간 표시
포인터 exp_a_p
1. 자료값(내용물) - 가리키는(지시, 지적하는, pointing) 해당 자료형 자료의 시작 주소, 첫주소
2. 목적 - 가리킨(지시한, 지적한, pointing) 주소를 통해 기억공간(대상, 목적물)을 간접참조하여 자료를 복사하거나 변경
3. 조건 - 간접참조가 목적이므로 지적한 변수와 자료형이 일치 필요
가르킴, 지시, 지적, pointing = 주소, 주소값 저장(보유)
가르키는 것, 지적 대상은 목적에 따라 자료, 자료값이기도 하고 공간이기도 함
1. 지적된 해당 자료형의 변수에 저장된 자료값을 참조(복사)하려면 실행문 우변에 위치하여 참조 연산자 별을 붙여 지적하는 주소에(를 통해) 접근하여 자료값을 간접참조(복사)
2. 지적된 해당 자료형의 변수의 공간에 접근하여 자료를 참조(변경, 재할당?)하려면 실행문 좌변에 위치하여 참조 연산자 별을 붙여 지적하는 주소인(주소를 통해) 공간에 접근하여 자료값을 간접참조(변경)
대상에 접근하여 참조(사용)하기 위해 참조 연산자 별 표시
직접참조: 변수에 접근하여 자료값을 읽거나(복사하거나) 변경
간접참조: 변수의 주소를 통해 자료값을 복사하거나 변경
배열명 - 배열의 첫주소인 상수
역할 구분
int * pa = &a; 선언시 선언문에 변수 a의 주소를 포인터 변수 pa에 저장
포인터 변수 pa가 a의 주소 &a를 저장하고 있으므로 pa == &a
*pa는 a의 주소 &a를 통해 참조한 a의 자료값이므로 *pa == *&a == a
&pa는 포인터 변수 pa 자체의 주소, 다중 포인터에서 사용
scanf에서 입력받아 변수 a에 직접 저장할 수 없어 그 주소 &a를 통해 넣음
종료 2023년 8월 18일 금 21시44분 태평양 시간 3/3
공부하면서 헷갈리는 부분을 엄청 정확히 설명해주셔서 너무 큰 도움이 되었어요. 감사합니다!
감사합니다. 잘 들었습니다.
좋은강의 잘 들었습니다. 별 포인트가 찔리네요😂
ㅋㅋㅋ 많은 분들이 그러시니 찔리지 않으셔도 돼용
홀린듯 들어왔읍니다 선생님🥰
ㅎㅎㅎ 감사합니다~앞으로도 자주 찾아와 주세요!!!😊
09:20 여기서부터가 찐이지 이거 알려주는 곳 흔치 않음
으흐흫흐흐 진짜를 알아봐 주셔서 감사합니다🙏🙏
엄청 자세하고, 쉽게 설명해주셔서 감사합니다~^^
감사합니다🙏 자주 찾아와주세용~
명쾌한 설명 감사합니다.
저도 감사합니다~😊
역참조 개념이 없어서 포인터 이름 찾으라 혼란을 겪고 있었는데, 좋은 강의 공유해주셔서 감사합니다!
ㅎㅎㅎ 이제 개념이 잘 잡힌거 같아 저도 좋네용~😊
대학원 연구분야가 인공지능과 관련되어서 주로 Python으로만 코딩하다가, C언어 조교를 담당하게 되어서 C언어를 공부하는데, 매번 포인터에 막혀서 걱정되었습니다. 그런데 단번에 이해 할 수 있도록 가르쳐주신다는게 정말 놀랍습니다. C언어를 어려워하는 1~2학년들에게 적극적으로 강사님의 영상을 추천하도록 하겠습니다. 앞으로도 좋은 강의 부탁드립니다!
와우!!!ㅋㅋㅋㅋ 기대하겠습니다🙏🙏🙏
감사해용~
강사님은 똑똑하시고 착하신 듯..
토트넘 리버풀 축구 경기 보고나서 무심코 들었는데
덕분에 오랜만에 포인터에 대한 기억이 살아났습니다 ㅋ
오호!! 저도 프리미어리그 좋아해용😊 좋게 봐주셔서 감사합니다:)
안녕하세요. 감사히 잘 봤어요.
엉뚱하게 포인터 덕분에 C언어에 입문한 파이선 초보자에요 .
2주 전부터 포인터가 어렵다는 영상들이 연결되어 궁금해서 여러 영상 봤더니 처음부터 재미있어서, 기초설명 영상 보니 많은 부분이 파이선과 겹치고, PLC 제어영상 보고 지난 7일부터 C언어를 배우게 됐어요.
8일 전에 대학 1학기 과정에 연결되어 2일 동안 정말 재미있게 문법 공부해서 수박겉핧기 마치고, 지체하면 그나마 적은 지식이라도 잊으니 파이선도 천천히 열심히 공부하고 있어요.
요즘 일주일간 일 없으면 하루종일 C언어가 아주, 매우, 무척 재미있어서 자는 시간, 운전 시간이 아까울 정도로 열심히 공부해서 나름 개념 파악 다하고 문법은 거의 익혔어요. 작년에 빝코인 자동거래 하려고 대충 파이선 배워 시도하다가 일하느라 방치했더니 다 잊어서 2달 전부터 열심히 해서 재귀함수 알듯말듯하고 거의 다 복습하고 반복중이었는데, C언어에 눌려서 어쩌다 파이선 참조하려 VS Code 켜면 아무 생각이 안나서 정리한 파일 찾아서 새로운 것 보는 듯해요. C언어 코드가 더 친숙해졌어요. 자료형 선언하는 등 복잡하다고 들었는데 더 재미있어요. 문법을 다 기억하지 못하지만 정확하게 개념을 이해했는지 모르지만 개념은 전혀 어려운적이 없어요. 전공자들이 어려워한다는 것이 이해가 안돼요. 우선 어느 영상에서 2시간 과제 말씀하신대로 안보고 쉬운 예제들을 풀 정도는 돼야겠지요. 재귀함수도 확실히 이해했어요. C언어 덕분이에요. 구조체도 파이선 클래스 개념 나름대로 이해해서 객체 개념도 중요하지만 단어 의미대로 목적도 중요하다고 이해하고 있어요. 목적을 갖고 객체를 만드는 거지요. 물건 만들 때 목적이 있으니 당연하게 포함된 개념이지만 중점을 둔다는 말이지요. 파이선은 self로 C++은 this라고 들었는데 이것도 처음에는 왜 자신이라고 했나 self는 기본이고 다른 인자를 받아 두개 인자에서 self와 인자가 합쳐져서 하나로 되는 이유를 모르고 따라하면 맞으니 그러려니 하고 썼는데, 어느 날 self가 만들어지는 객체라는 것을 깨달았어요. 빵틀이던 설계도에서 누구 빵인지 어떤 빵인지 정할 수가 없으니 이름 쓸 공간을 마련한 거에요. 만들 때 그 이름으로 물건(객체) 이름이 되고, 객체와 관련된 인자는 자신과 연결되어 self.xxx 되지만 무관하면 별도 변수가 되지요.
문제는 처리절차 = 알고리즘이 어렵겠지요. 이제라도 재미붙어서 열심히 하고 있어요.
이렇게 재미있는 줄 알았다면 30년전에 장난삼아 리눅스 깔았다지웠다 놀 때 했다면 하는 생각이 드네요. 그때는 막연히 어렵다고 생각해서 시도도 못했어요.
복잡하고 세밀한 조정을 좋아해서 도움이 되는 점도 있는 것 같아요. 수리할 때도 가정용 냉방기는 간단해서 재미없고 제어장치 많이 붙은 큰 상업용 냉방, 냉동기가 재미있어요.
이 영상도 10일전 경에 봤고 좋아요 눌려져 있네요. 현재 반복하는 C언어 영상들 끝나면 '독하게 시작하는 C 제1장 C 프로그래밍 입문 - 첫 번째' 봤는데 가입해서 공부할 예정이에요. 어느 정도인지 매우 궁금하네요. 요즘 파이선은 뒷전이고 C언어에 푹 빠졌어요. 이런 날도 오네요.
아래 글은 제가 10일 동안 처음 C언어를 배우면서 느끼고 이해한 기초 개념들이에요. 저는 파이선도 초보이고 아직 알고리듬은 시작도 못하고 몇 예제에서 어려운 것은 느꼈어도, 포인터 첫 영상부터 어려운 것 없었고 포인터 연산도 당연히 자료형 맞추어 다음 자리 찾는 것이 쉬웠었는데, 전공자들도 당시 이해 못해서 개발을 포기했다는 여러 댓글들 보면서 포인터 뿐만 아니라 일반적인 공부방법에서 기초적인 부분들의 이해가 안 돼서인가 의아하여 시간을 내서 썼어요.
몇 블로그를 참조했으나 왕초보의 이해수준이고 이 수준의 상태를 알려드리고 더 이해 못 하는 분들에게 도움이 될까하여 글 올리니 수정 보완을 해 주시면 감사하겠고 무시하셔도 됩니다.
육하원칙 - 1. 언제: 순서 2. 어디서: 식별자 등 표시 위치 3, 4. 누가 무엇을: 문장이나 함수 등에서 주체와 객체, 혹 손님, 행인 등 5. 어떻게: 같은 표식도 표시자(Punctuator)나 연산자(operator) 역할 등 6. 왜: 지정, 정의된 이유나 역할, 목적 등을 다시 설명하거나 실행절차 등을 설명
({[초보 특히 왕초보시에는 어떤 것을 몇분도 아닌 지금 막 듣고도 생각이 안나거나, 다른 것과 혼동되거나, 자신만의 엉뚱한 추측, 상상, 연결, 대입하거나, 갑과 을을 바꿔서 알아 듣거나, 순서를 바꾸거나, 비슷하거나 많이 달라도 같다고 하는 등으로 딴 소리하고, 심지어 맞는 말을 하면서 틀리다고 하거나 모른다고 하거나, 본인이 뭘 모르는지 혼동하는지 모르니 확인해 가시면서 답답해도 계속 반복해 주셔야 해요.
오죽하면 낫 놓고 기역 자 모른다, 쥐어줘도 모른다 고 하겠어요. 알기까지, 알게 되기까지의 과정과 시간이 필요한가 봐요.]})
학습자들은 누구나 스스로 곡해, 변경, 추측해서 오해하거나 모르겠다고 하는 경우들이 있는데 이를 줄이는게 중요하고, 작은 차이를 알아내고 그에 맞게 적용해야 하지요.
해당 내용을 건성으로 시청하거나 읽고서 모르는 부분을 재시청하여 확인도 안 하고 질문을 올리는 무성의와 남의 생명인 시간을 허비하게하는 악행도 없애야 합니다. 그후에 확인이나 하는지 답답해요.
2023년 8월 18일 금 21시44분 태평양 시간 1/3
와👍👍👍 이렇게 열정적이고 열심히 하시는 분이라니!!! 이 자세로 뭘 한들 실패 하겠습니까??? 당연한 수순으로 좋은 결과를 얻으실 거 같아요.
올려주신 정리 내용은 잘 봤습니다. 배운 내용을 이렇게 정리 하시려면 상당한 이해가 필요한 부분인데 잘 하신 거 같아요:)
긴 영상들 끝까지 들어 주서서 감사합니다🙏
@@withhoneyc
답변 주셔서 감사합니다.
기사 공부중에 c언어는 버릴까 하다 강의 듣고 이해했습니다!! 감사합니다.
흑흑ㅠㅠ 나의 C언어가 버려질뻔 했네요 ㅎㅎ
안녕하세요. 감사히 잘 봤어요.
파이선 초보자인데 포인터가 어렵다고 영상들이 연결되어 궁금해서 여러개 보니 매우, 아주, 무척 재미있어서 결국 C언어를 공부하게 됐어요. 대학 1학기 과정이 연결되어 2일만에 개략을 보았는데 정말 흥미진진했어요.
이렇게 재미있는 줄 알았다면 30년전에 장난삼아 리눅스 깔았다지웠다 놀 때 했다면 하는 생각이 드네요.
이제라도 재미붙어서 열심히 하고 있어요.
초보자가 본 포인터 난해설은 선언문에서 별을 붙여 지시자, 지적자로 지정하고는 실행문에서는 별을 떼고 일반 변수처럼 문자만 있으니 헛갈리는 첫걸음, 지름길이에요.
그리고는 갑자기 별을 다시 붙이고 자신, 지시자, 지적자의 값을 찾아오는게 아니라 지적한 곳의 값을 찾아온다니 헛갈릴 수 있지요.
그런데 위 부분은 정말 처음 듣는 이들이 혼동되어야지 두세번은 짧은지 모르겠는데 관심갖고 자세히 보면 전혀 어렵지 않지요. 달 가르키는 손가락만 보며 달 찾으니 보이나요?
막연한 추측은 실행문에서도 계속 별 붙이고, 참조시에 별을 두개 붙이면 번잡해 보여서 그랬나 하는 생각이 들었어요.
말씀하신 대로 누구나 스스로 곡해, 변경, 추측해서 오해하거나 모르겠다고 하는 경우들이 있는데 이를 줄이는게 중요하고, 작은 차이를 알아내고 그에 맞게 적용해야 하지요.
2023년 8월 14일 월 03시52분 태평양 시간
와!!! 재밌고 흥미진진하다니!!! 앞으로 즐기실 날만 남았네요!!!👍👍👍
늘 응원하겠습니다!!!!
@@withhoneyc
답변 감사합니다.
2023년 8월 14일 월 09시28분 태평양 시간
영상보고 확실하게 포인터 정리했어요 👍 감사합니다!
와우👍 정말 멋지네요! 앞으로 쭉쭉 나아가세용!!!
감사합니다!
저도 감사합니다
미쳤다미쳤어.... 포인터 때문에 c언어 포기한게 3년전인데 드디어 이해하다.....
ㅎㅎㅎㅎ 이해하셨다니 저도 너무 좋네용~😊
포인터 선언할 때 왜 자료형을 구분하는지 명확하네요.. 포인터는 해당 값이 저장된 주소 시작이기 때문에 char포인터로 충분 할 줄 알았는데. 포인터 역참조를 위해 해당 주소에 저장된 값을 명확하게 읽기 위함을 몰랐습니다. 현업에서 더 정교한 코드로 보답하겠습니다.
아하! 현업에서 빛을 발하시길 응원합니다!💪
좋은 강의 감사합니다..
*data와 data를 다르게 생각해서 너무 헷갈렸는데 data 와 * 연산자 이렇게 따로 봐야한다고 생각하니 포인터 개념이 정리 되었습니다!! 감사합니다 ㅎㅎ
넹 맞아용:) 드뎌 포인터에서 자유롭게 되셨네요!!!!
예쁘고 목소리가 고와서 집중되요😊
ㅎㅎㅎㅎㅎ 곱다는 말은 참 오랜만이네요!! 감사합니다🙏
와 이제야 이해하게 됐어요! 감사합니다
이해 되셨다니 저도 기쁘네용😊
축하드랴용~ㅎㅎ
목소리가 성우신줄 C언어를 이렇게 유치원 선생님 처럼 친절한 말투로 공부하긴는 처음이네요 ㅎㅎ
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅌㅌ 많이 놀라셨죠?ㅋㅋㅋㅋ
포인터는 일반 변수명과 달리 컴파일때는 아무값도 특정할수 없고 오직 메모리에 적재된 이후에야 결정될수 있어서
포인터 접근은 결국 운영체제의 지원까지 필요할것이며 CPU부터 지원하고 있습니다.
실제로 CPU 명령셋중에는 포인터 조작에 직접 관여되는 특별한 명령어가 준비돼 있는데
그래서 포인터가 결코 쉽지않은거는 맞아요
정말감사합니다
저도 감사합니다~😊
선생님, 좋은 강의 감사합니다! 최근에 포인터를 안썼어서 기억이 가물가물했는데 덕분에 다시 감을 잡게 됐어요!! 혹시 malloc이랑 free같은 c언어 동적할당 강의도 찍으셨을까요??
넹넹 ~ 감사합니다~😊
ruclips.net/p/PLrj92cHmwIMfxmffI2RSuSmWfmHvLksoB&si=bSMr02zF1pbTRxcz
정보처리기사 실기 준비하면서 2차원배열과 포인터 찾아보다가 보게되었습니다. 설명이 다른 강의보다 쉬워서 도움이 많이 되고있습니다. 감사합니다. 혹시 정보처리 기사 실기 기출문제중 2차원배열이나 포인터 문제 영상 올려줄수는 없을까요? ^^
ㅎㅎ 감사합니다:)
풀이 자체를 해드리는 건 어렵지 않겠지만^^ 중간에 한 두개 올리는 건 좀 어울리지 않는 거 같아요:)
나중에 기회가 되면 정처기 하나 만들께요~
썜 강의 항상 감사하게 듣고있습니다. 포인터 개념 설명 너무 좋아요! 이런강의가 심지어 무료인게 정말 감사해요! 독학러에게 최고의 선생님이세요!
칭찬과 격려 감사 드립니다🙏🙏🙏
감사합니다:)
감사합니다
거의 신의역역에 들어간 강의 입니다.
파이썬 문법 보고 C보려고 들어왔는데..
놀랍습니다.
파이썬에서 변수의 의미를 이해했는데...
변수는 그냥 이름이다. 메모리번지를 사용하면 코딩하기 너무 힘들어서 변수라는 이름,레이블을 만들어서
인터프리터나 컴파일러가 변수를 주소로 바꿔서 해석하게 한다.
즉 변수는 데이타가 있는 (데이타를 할당한 메모리의 주소)를 바이딩 하고 있다.라고 이해하면서
변수는 프로그래머가 식별하기 위해 만든 임시적인 이름이고 인터프리터나 컴파일러가 그것을 활용해서 기계어로 만들어
실행하는것이다.
그러면 변수이름, 함수이름, 리스트이름,클래스이름,객체이름 도 모두 메모리에 할당된 어떤 시작 주소를 바인딩 하고 있는것이고
실제 컴파일러는 그 주소에서 데이타나 코드를 가져와서 기계어로 만들어 실행파일을 만드는것이다.
즉 프로그래머가 메모리상의 위치를 숫자로 기억하기 힘들어서 만든 이름표 인 뿐인것이다.
변수는 컴파일러가 그 내용을 참조하고
포인터 변수는 컴파일러가 포인트변수가 가리키는 변수의 주소, 변수명이 바인딩하고 있는 그 주소 를 참조하고
그 내용을 참조할때에는 역참조라는 약속을 해서 내용을 참조하게 한다.
자료형은 메모리에 할당된 데이타의 저장 공간을 정하는 것이다.
그래서 어떤 변수의 자료형은
그 변수가 그 자료형이 할당되어 있는 메모리의 첫번지를 바인딩하고 그 공간의 크기를 정해준다.
포인터 변수가 어떤 변수를 가리킬때에는 그 변수가 바인딩하는 주소를 가리키지만
그 주소에서 시작하여 얼마만큼의 크기가 할당되어 있는지를 판별하는 기준으로
포인터 변수가 가르키는 변수의 자료형과 동일한 자료형으로 선언해야한다.
중간에 강의를 들으면서 이해가 되지 않았던 부분이 이해가 되었습니다.
강의 들으면서 들었던 의문은
만약 1byte의 숫자 자료형을 가진 변수라면 10진수로 0에서 2의 8승-1 이므로
0~63까지의 숫자를 표현할 수 있고 0에서 ~63까지의 숫자를 넣을 수 있는 공간은 1byte 면 되므로
그 변수의 주소를 저장하는 공간은 1bit면 되기 때문에
포인터 변수의 자료형은 1bit 자료형이면 된다고 생각했기 때문입니다.
이처럼 생각하면 포인터 즉 주소를 저장하는 변수는 자료형/1byte 의 자료형이면 된다고 생각했는데...
역참조. 포인터가 가리키는 주소(시작주소, 변수 바인딩하고있는 주소)의 내용을 참조할려면
포인터가 담을 수 있는 주소공간이 아니라 그 내용 공간의 크기가 같아야 온전하게 역참조 할 수있음을
이해하게 되엇습니다.
겸사겸사 쌩뚱맞게 자격증을 준비때문에 프로그래밍 공부를 해야할 일이 생겨서 여기 저기 둘러보다가
포인터 강의 듣게 되었는데 정말 너무 너무 알뜰 살뜰 잘 챙겨주셔셔 감사드립니다. 꾸벅~
잊어 버리기 전에 다시 주기적으로 반복해야할것 같다는 생각이 듭니다. >.<
1주일째 프로그래밍 공부중인 어느 바보가..
다시 한번 감사인사 드립니다.
와! 친절한 피드백 감사드립니다.
내용을 보니 너무 잘 이해하신거 같네요👍
포인터 강의만 몇번 들었더니 큰 도움이 됐습니다. 초보자 입장에서 파이썬 문법을 공부해봤던 사람 입장에서 포인터는 정말 왜 있지? 왜 쓰지? 같은 느낌이였는데, 강의 듣고 왜 쓰는지 조금은 이해가 된거같습니다. 제가 이해한것중에 가장 큰 이유는 함수를 호출해서 사용하고, 리턴값으로 여러개를 받고 싶을때가 가장 유용한거같습니다. 그리고 그냥 문자열 편하게 저장할때.. 사실 더블포인터 부분이 아직 좀 이해가 안되는 부분이 있는데, 어떤 분 강의를 들으니 그냥 이차원 배열 쓰고 싶을때 쓴다고 생각하라고 하더라고요. 선생님께서는 더블포인터는 어떤 상황에 주로 쓴다고 생각하세요? 저는 그냥 포인터 주소 저장하려고 이차원 배열 쓴다만 기억나서요..
포인터에 저장된 주소 값을 외부 함수에서 변경하려면 더블 포인터가 필요합니다.
개인적으론 이차원 배열이 필요한 경우에 그 크기가 가변적이라면 포인터 배열을 사용해서 동적할당 받습니다. 이차원 배열보다 사용하긴 어렵지만, 메모리를 효율적으로 쓸 수 있다는 장점이 있습니다.
질문하신 내용을 보니 굉장히 열심히 공부하고 계신거 같네요. 👍
개인적인 의견으론…문법 공부 하실 때 그 쓰임에 관해 너무~~깊게 고민 하시는 건 걸림돌이 된다고 생각합니다. 다양한 예제들을 코딩하다 보면 받드시 필요로 하는 문법들이 생기게 되고 그를 바탕으로 이해 하시는 게 더 큰 도움이 된다고 생각합니다. 짧은 예제로 그 문법의 필요를 이해 하시엔 너무 큰 어려움이 있기 때문 입니다. 문법적으로 어느 정도 이해 되셨다면 관련 예제들을 꼭 플어 보시길 권장합니디.
그럼!!! 앞으로도 즐코하세요!!
배고프지 않게 밥 꼭 챙겨 드시고용:)
@@withhoneyc 답변 감사합니다. 그럼 일단 삽질 좀 더 하도록 하겠습네다. ㅎㅎ
돌고돌아 혀니C코딩으로 ... 돌돌혀 ..
ㅋㅋㅋㅋㅋㅋㅋㅋ 어딜 가셨나요? 다신 가지
미세용~ㅎㅎㅎ
선생님 오랜만이에요!! 복학하고 후배가 C언어 어려워하길래 바로 추천해줬습니다ㅎㅎㅎ
진홍씨 오랜만이예욜😊 잘지내고 있나요? 원탑 찍고 있나요?ㅎㅎㅎ
@@withhoneyc 코딩천재 후배를 못이겨서 투탑 유지중입니다 🥹 요즘은 웹개발 공부중이에요 :)
C언어 배우고 나니깐 다른 언어 습득하는게 정말 빨라지더라구요..!!😎 언제나 감사드립니다ㅎㅎ
@jinhongKim ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 대단한 분이 나타나셨군요!!!
@@jinhongKim 진홍씨! 자랑스럽습니다!!!!👍
누나! 너무 예뻐서 집중이 안돼요…😢
이 분 말투가 윤가이 서울 사투리랑 너무 닮아서 정감이 가네요 ㅋㅋㅋㅋ
ㅋㅋㅋㅋㅋㅋㅋㅋ 아 그래요??? 이렇게 뜰 줄 몰랐거등요!!!ㅋㅋㅋㅋㅋㅋㅋㅋ
개꿀강의 찾았다 학원 안다녀도 되겠네
ㅎㅎㅎㅎ 자주 찾아와 주세용😊
포인터는 가리키는 메모리의 시작주소만 알고 있어서 역참조시에 그 저장공간 전부를 읽으려면 그 크기를 알아야 하니까 포인터 선언 할 때도 자료형을 써줘야 하는 것이다. 까지는 이해를 했습니다. 그런데 같은 4바이트라도 float과 int형을 구별해서 써줘야 하는 걸로 아는데요, 이것의 이유는 뭔가요?
int형은 시스템에 따라 크기가 다를 수 있습니다. 만약, 크기가 같다 하더라도 타입에 따라 예외를 두면 문법이 더 복잡해지지 않을까요?
센세 혹시 배열의 포인터 강의는 없을까요?
ruclips.net/video/8I3ORaa0STo/видео.html
목소리가 너무 듣기 좋습니다. 아나운서 같아요
ㅎㅎㅎㅎ 감사합니다~🙏
선생님 너무 이뻐요.
ㅎㅎ 감사합니다😊
안녕하세요! 그 주소라는 게 그저 메모리의 데이터 공간이라고 이해하면 되는건가요?? 그리고 주소를 1001 이런식으로 표현하셨는데 주소 1001은 1byte만 저장한다 즉 주소는 1byte만 저장한다는 건가요??
우리가 사는 곳에 주소가 있듯이 메모리에도 주소값이 1byte당 한 개씩 할당됩니다. 우리가 사는 곳에 1평당? 주소가 할당 된다고 보시면 될까요???
설명에 쓰인 주소값은 임의로 준 것이니 크게 신경 안쓰셔도 됩니다:)
미녀 강사님 감사합니다 잘보고 있습니다 ^^
흫흐흐흐 저도 감사합니단😊
질문요!!
int *a 가 틀렸디고 하시는데,
그럼 연속적으로 포인터 변수를 선언하는데
int* a, b;
와 같이 선언 하면 b가 포인터 변수가 되는건가요?
제가 int *a를 틀렸다고 한 부분이 있나요??
다 가능한 표현입니다.
연속적으로 포인터 선언 시 아래와 같이 하시면 됩니다.
int* a, * b, * c;
19:19
우와…
고..공대 여신이다
공대 사람이였습니다!!! ㅋ
사랑하고 싶다❤
네:) 앞으로도 많은 사랑 부탁 드립니다!!!
아나운서인가요
ㅋㅋㅋㅋ 감사합니다🙏
결혼하셨어요?
#include
#include
int main( ) {
static int a[ ] = {0,1,2,3,4};
int *p[ ] = {a,a+1,a+2,a+3,a+4};
int **ptr = p;
ptr++;
printf("
%d %d %d", ptr-p, *ptr-a, **ptr);
*ptr++;
printf("
%d %d %d", ptr-p, *ptr-a, **ptr);
*++ptr;
printf("
%d %d %d", ptr-p, *ptr-a, **ptr);
++*ptr;
printf("
%d %d %d
", ptr-p, *ptr-a, **ptr);
return 0;
}
포인터에 대한 이해는 쉽지는 않은데... 위의 코드를 자세히 설명해 주실 수 있나요?
정확히 이해가 안되어서요. 언제나 원리와 이해를 위한 탁월한 강의에 감사드립니다.
이중포인터
ruclips.net/video/C995oY8JGzs/видео.htmlsi=F-Y1gyGrkir4zabc
포인터 배열
ruclips.net/video/TKBScOrESyo/видео.htmlsi=6oSQ-py1pqxgshZ8
포인터 배열과 이증 포인터
ruclips.net/video/jilSWvri33g/видео.htmlsi=EEJH0pg8BsVAwfWV
3개의 강의를 듣고 이해가 되면 풀 수 있는 문제입니다:)
19:19