최근 며칠 동안 포인터에 관한 영상을 보며 공부하고 있었는데 추천 영상에 떠서 들어왔는데 재밌게 잘 시청했습니다~
@jaekunyoo8509 Жыл бұрын
안녕하세요. 감사히 잘 봤어요. 엉뚱하게 포인터 덕분에 C언어에 입문한 파이선 초보자에요 . 2주 전부터 포인터가 어렵다는 영상들이 연결되어 궁금해서 여러 영상 봤더니 처음부터 재미있어서, 기초설명 영상 보니 많은 부분이 파이선과 겹치고, 지난 5일 정도에 이 영상볼 때 회로도 보여 주시고, 1시간 PLC 제어영상 보고 지난 7일부터 C언어를 배우게 됐어요. 8일 전에 대학 1학기 과정에 연결되어 2일 동안 정말 재미있게 문법 공부해서 수박겉핧기 마치고, 지체하면 그나마 적은 지식이라도 잊으니 파이선도 천천히 열심히 공부하고 있어요. 요즘 일주일간 일 없으면 하루종일 C언어가 아주, 매우, 무척 재미있어서 자는 시간, 운전 시간이 아까울 정도로 열심히 공부해서 나름 개념 파악 다하고 문법은 거의 익혔어요. 문제는 처리절차 = 알고리즘이 어렵겠지요. 이제라도 재미붙어서 열심히 하고 있어요. 이렇게 재미있는 줄 알았다면 30년전에 장난삼아 리눅스 깔았다지웠다 놀 때 했다면 하는 생각이 드네요. 아래 글은 제가 10일 동안 처음 C언어를 배우면서 느끼고 이해한 기초 개념들이에요. 저는 파이선도 초보이고 아직 알고리듬은 시작도 못하고 몇 예제에서 어려운 것은 느꼈어도, 포인터 첫 영상부터 어려운 것 없었고 포인터 연산도 당연히 자료형 맞추어 다음 자리 찾는 것이 쉬웠었는데, 전공자들도 당시 이해 못해서 개발을 포기했다는 여러 댓글들 보면서 포인터 뿐만 아니라 일반적인 공부방법에서 기초적인 부분들의 이해가 안 돼서인가 의아하여 시간을 내서 썼어요. 몇 블로그를 참조했으나 왕초보의 이해수준이고 이 수준의 상태를 알려드리고 더 이해 못 하는 분들에게 도움이 될까하여 글 올리니 수정 보완을 해 주시면 감사하겠고 무시하셔도 됩니다. 육하원칙 - 1. 언제: 순서 2. 어디서: 식별자 등 표시 위치 3, 4. 누가 무엇을: 문장이나 함수 등에서 주체와 객체, 혹 손님, 행인 등 5. 어떻게: 같은 표식도 표시자(Punctuator)나 연산자(operator) 역할 등 6. 왜: 지정, 정의된 이유나 역할, 목적 등을 다시 설명하거나 실행절차 등을 설명 ({[초보 특히 왕초보시에는 어떤 것을 몇분도 아닌 지금 막 듣고도 생각이 안나거나, 다른 것과 혼동되거나, 자신만의 엉뚱한 추측, 상상, 연결, 대입하거나, 갑과 을을 바꿔서 알아 듣거나, 순서를 바꾸거나, 비슷하거나 많이 달라도 같다고 하는 등으로 딴 소리하고, 심지어 맞는 말을 하면서 틀리다고 하거나 모른다고 하거나, 본인이 뭘 모르는지 혼동하는지 모르니 확인해 가시면서 답답해도 계속 반복해 주셔야 해요. 오죽하면 낫 놓고 기역 자 모른다, 쥐어줘도 모른다 고 하겠어요. 알기까지, 알게 되기까지의 과정과 시간이 필요한가 봐요.]}) 학습자들은 누구나 스스로 곡해, 변경, 추측해서 오해하거나 모르겠다고 하는 경우들이 있는데 이를 줄이는게 중요하고, 작은 차이를 알아내고 그에 맞게 적용해야 하지요. 해당 내용을 건성으로 시청하거나 읽고서 모르는 부분을 재시청하여 확인도 안 하고 질문을 올리는 무성의와 남의 생명인 시간을 허비하게하는 악행도 없애야 합니다. 그후에 확인이나 하는지 답답해요. 2023년 8월 18일 월금 21시44분 태평양 시간 1/3
@alphago4105 ай бұрын
시작부에 int a; 라고 선언한것도 컴파일후 a 같은 네이밍들은 모두 사라지고 실제로는 주소값이 매핑될겁니다. 다만 주소값은 메모리에 로딩된 이후에야 구체화될수 있기에 저장된 실행파일에는 유니크한 일련번호로만 존재하겠죠. 그렇다면 선언한 모든 일반변수는 사실상 포인터이고 *int p; 처럼 포인터 선언한것은 런타임시 이중포인터가 되고, 이중포인터 선언한것은 삼중포인터 이렇게 생각할수 있을것 같습니다. 이렇게 보는것이 맞을까요?
@dckang81373 жыл бұрын
감사합니다! 앞으로가 더욱 기대됩니다!
@TWINIEX3 жыл бұрын
감사합니다. 좋은 컨텐츠 많이 만들께요. ☺️
@jaekunyoo8509 Жыл бұрын
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
@M_Souls3 жыл бұрын
역시 포인터는 쉽지 않네요😂 반복 시청 할게요. 감사합니다.
@TWINIEX3 жыл бұрын
WIN32 API에서 포인터들이 종종 쓰이는데 같이 한번 해봐요 ㅎ
@jaekunyoo8509 Жыл бұрын
안녕하세요. 감사히 잘 봤어요. 엉뚱하게 포인터 덕분에 C언어에 입문한 파이선 초보자에요 . 2주 전부터 포인터가 어렵다는 영상들이 연결되어 궁금해서 여러 영상 봤더니 처음부터 재미있어서, 기초설명 영상 보니 많은 부분이 파이선과 겹치고, 이 영상에서 회로도 보여 주시고, 1시간 PLC 제어영상 보고 지난 7일부터 C언어를 배우게 됐어요. 8일 전에 대학 1학기 과정에 연결되어 2일 동안 정말 재미있게 문법 공부해서 수박겉핧기 마치고, 지체하면 그나마 적은 지식이라도 잊으니 파이선도 천천히 열심히 공부하고 있어요. 요즘 일주일간 일 없으면 하루종일 C언어가 아주, 매우, 무척 재미있어서 자는 시간, 운전 시간이 아까울 정도로 열심히 공부해서 나름 개념 파악 다하고 문법은 거의 익혔어요. 작년에 빝코인 자동거래 하려고 대충 파이선 배워 시도하다가 일하느라 방치했더니 다 잊어서 2달 전부터 열심히 해서 재귀함수 알듯말듯하고 거의 다 복습하고 반복중이었는데, C언어에 눌려서 어쩌다 파이선 참조하려 VS Code 켜면 아무 생각이 안나서 정리한 파일 찾아서 새로운 것 보는 듯해요. C언어 코드가 더 친숙해졌어요. 자료형 선언하는 등 복잡하다고 들었는데 더 재미있어요. 문법을 다 기억하지 못하지만 정확하게 개념을 이해했는지 모르지만 개념은 전혀 어려운적이 없어요. 전공자들이 어려워한다는 것이 이해가 안돼요. 우선 안보고 쉬운 예제들을 풀 정도는 돼야겠지요. 재귀함수도 확실히 이해했어요. C언어 덕분이에요. 구조체도 파이선 클래스 개념 나름대로 이해해서 객체 개념도 중요하지만 단어 의미대로 목적도 중요하다고 이해하고 있어요. 목적을 갖고 객체를 만드는 거지요. 물건 만들 때 목적이 있으니 당연하게 포함된 개념이지만 중점을 둔다는 말이지요. 파이선은 self로 C++은 this라고 들었는데 이것도 처음에는 왜 자신이라고 했나 self는 기본이고 다른 인자를 받아 두개 인자에서 self와 인자가 합쳐져서 하나로 되는 이유를 모르고 따라하면 맞으니 그러려니 하고 썼는데, 어느 날 self가 만들어지는 객체라는 것을 깨달았어요. 빵틀이던 설계도에서 누구 빵인지 어떤 빵인지 정할 수가 없으니 이름 쓸 공간을 마련한 거에요. 만들 때 그 이름으로 물건(객체) 이름이 되고, 객체와 관련된 인자는 자신과 연결되어 self.xxx 되지만 무관하면 별도 변수가 되지요. 문제는 처리절차 = 알고리즘이 어렵겠지요. 이제라도 재미붙어서 열심히 하고 있어요. 이렇게 재미있는 줄 알았다면 30년전에 장난삼아 리눅스 깔았다지웠다 놀 때 했다면 하는 생각이 드네요. 그때는 막연히 어렵다고 생각해서 시도도 못했어요. 복잡하고 세밀한 조정을 좋아해서 도움이 되는 점도 있는 것 같아요. 수리할 때도 가정용 냉방기는 간단해서 재미없고 제어장치 많이 붙은 큰 상업용 냉방, 냉동기가 재미있어요. 요즘 파이선은 뒷전이고 C언어에 푹 빠졌어요. 이런 날도 오네요. 아래 글은 제가 10일 동안 처음 C언어를 배우면서 느끼고 이해한 기초 개념들이에요. 저는 파이선도 초보이고 아직 알고리듬은 시작도 못하고 몇 예제에서 어려운 것은 느꼈어도, 포인터 첫 영상부터 어려운 것 없었고 포인터 연산도 당연히 자료형 맞추어 다음 자리 찾는 것이 쉬웠었는데, 전공자들도 당시 이해 못해서 개발을 포기했다는 여러 댓글들 보면서 포인터 뿐만 아니라 일반적인 공부방법에서 기초적인 부분들의 이해가 안 돼서인가 의아하여 시간을 내서 썼어요. 몇 블로그를 참조했으나 왕초보의 이해수준이고 이 수준의 상태를 알려드리고 더 이해 못 하는 분들에게 도움이 될까하여 글 올리니 수정 보완을 해 주시면 감사하겠고 무시하셔도 됩니다. 육하원칙 - 1. 언제: 순서 2. 어디서: 식별자 등 표시 위치 3, 4. 누가 무엇을: 문장이나 함수 등에서 주체와 객체, 혹 손님, 행인 등 5. 어떻게: 같은 표식도 표시자(Punctuator)나 연산자(operator) 역할 등 6. 왜: 지정, 정의된 이유나 역할, 목적 등을 다시 설명하거나 실행절차 등을 설명 ({[초보 특히 왕초보시에는 어떤 것을 몇분도 아닌 지금 막 듣고도 생각이 안나거나, 다른 것과 혼동되거나, 자신만의 엉뚱한 추측, 상상, 연결, 대입하거나, 갑과 을을 바꿔서 알아 듣거나, 순서를 바꾸거나, 비슷하거나 많이 달라도 같다고 하는 등으로 딴 소리하고, 심지어 맞는 말을 하면서 틀리다고 하거나 모른다고 하거나, 본인이 뭘 모르는지 혼동하는지 모르니 확인해 가시면서 답답해도 계속 반복해 주셔야 해요. 오죽하면 낫 놓고 기역 자 모른다, 쥐어줘도 모른다 고 하겠어요. 알기까지, 알게 되기까지의 과정과 시간이 필요한가 봐요.]}) 학습자들은 누구나 스스로 곡해, 변경, 추측해서 오해하거나 모르겠다고 하는 경우들이 있는데 이를 줄이는게 중요하고, 작은 차이를 알아내고 그에 맞게 적용해야 하지요. 해당 내용을 건성으로 시청하거나 읽고서 모르는 부분을 재시청하여 확인도 안 하고 질문을 올리는 무성의와 남의 생명인 시간을 허비하게하는 악행도 없애야 합니다. 그후에 확인이나 하는지 답답해요. 2023년 8월 18일 금 21시44분 태평양 시간 1/3
@Nobody-cyber2 жыл бұрын
이렇게 좋은 채널이 왜 안뜨는지 모르겠네요 보안인으로써 정말 좋은 강의 감사드립니다! 포인터를 이렇게 설명해주시는 분은... ㅠㅡㅜ
@TWINIEX2 жыл бұрын
좋은 말씀 감사합니다. 많이 떠야할텐데 왜 안뜰까요 😁
@yoonjaekim8523 Жыл бұрын
풀스택엔지니어로 2개월차, 학교에서 다 배운 내용이긴하지만 어떻게 엮어서 내가 0부터 구상해서 자동화설비까지 만들어 낼 수 있을까 많이 고민하는데😢.. 매주 주말마다 깹님 영상 보면서 나도 할수있겠다 하면서 매주 출근할 수 있는 용기를 얻게 되네요..ㅋㅋㅋ감사합니다..
@TWINIEX Жыл бұрын
남자는 풀스택이죠. 😁
@jaekunyoo8509 Жыл бұрын
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