조금 헤갈려서 반복해서 듣었는데 다음과 같이 이해하는게 맞을 까요? a: (포인터변수의) 메모리의 주소값 *a : (포인터변수의) 메모리의 주소에 저장 된 값 &b : (일반 변수의) 메모리 주소 값 *a = &b; 하게 되면 a는 변수의 b의 메모리 주소 값 *a는 변수의 b에 저장된 실제 데이터 값
안녕하세요~~ 먼저 답변이 늦어져서 죄송합니다. 위에 있는건 이해하신 내용이 맞습니다. 아래는 조금 문법적인 부분이 있는데, int *a = &b; 이건 이해하신게 맞습니다. 선언할때 주소값을 넣게 되니깐요 헌데, 선언을 위해서 해버리고, *a = &b; 의 의미는 a 가 가리키고 있는 공간에다가 b의 주소값을 넣어라 라는 의미가 되서 엉뚱한 결과가 나오게 됩니다. ^^ 도움이 되셨으면 좋겠습니다.
좋은 강의 감사드립니다! 제가 이해한게 맞을까요? int *a; *a = 10; -> 이 경우는 포인터변수 a가 가리키는 메모리 주소 ‘안에 들어있는 값’을 10으로 넣어준다. ------------------- int *a = 10; -> 이 경우는 포인터변수 a가 가리키는 ‘메모리 주소값’을 메모리주소 10으로 변경한다. ----------------- 자바만 공부한 입장에서는 상당히 비직관적이네요ㅋㅋ
안녕하세요... 첫번째 경우, 그러니깐 int *a; *a = 10; 요 설명은 맞습니다. 근데 두번째, int *a = 10; 설명은 맞는데, 10이라는 메모리 주소를 알수가 없기 때문에, 저런식으로 하게 되면 오류가 발생을 하게 되요.. &b; 이런식으로 주소값을 넣어줘야 정상 수행이 됩니다. 도움이 되셨으면 좋겠습니다. ^^
마지막 문제를 보다가 궁금한 점이 생겨서 질문합니다! int A = 10, B; int *C = &B; B = A--; 이 부분에서 A--는 증감연산자가 후위에 있어서 B에 A의 값인 10을 할당하고 A가 9로 바뀌신다고 하셨는데 이해는 했는데요... 자바스크립트를 쓰다가 와서 그런지 헷갈리네요! A -= 1 과 같은 재할당의 형태가 아닌데 실제로 A의 값이 증감연산자를 통해서 직접 10에서 9로 재할당처럼 변화가 되는 건지 궁금해요
안녕하세요 완강하고 포인터의 이해도가 완벽하지 않아서 다시 보고있는데 n잡 10챕터 4강 c언어 강의 35번에서 int *C = &B; 이렇게 나오는데 이거랑 이 강의에서 나오는 int *a; a=&b; 이거랑 똑같나요? 강의를 들어보니까 똑같이 표현되고 있는거 같아서 여쭤봅니다!!
넵...똑같습니다~~ 첫번째꺼는 초기값으로 바로 지정을 한거고요~ 두번재꺼는 일단 포인터를 만들어놓고, 그리고 그 다음에 그 포인터변수에다가 주소값을 대입한 형태입니다. int *c; 이렇게 표현하는게 c 변수에는 주소값이 들어갈꺼다 라고 표현한거고, 그 이후에 c = &b; 이런 표현도 가능합니다. 감사합니다. ^^
선생님 엔잡에서 실기 강의 감사히 잘 듣고 있는 수강생입니다 감사합니다. 제가 드리고 싶은 질문은 int *C라고 했을때 이 C라는 포인터 공간에는 오직 '주소값'만 들어갈 수 있는건지 궁금합니다. 이 문제에서 int B는 결국 30이라는 값과 101번지라는 주소값 이렇게 각각 2가지를 가지는 데 int *C는 라는 공간에는 주소값만 가질 수 있는 거고, 30이란 값은 int *C의 값이 될 수 있는 건지 궁금합니다. 30은 int B의 값이고 *C는 그저 그걸 방향만 가리키고 있는건가요?
안녕하세요~~~ 포인터 변수도 마찬가지로 어딘가에 선언이 되어 있습니다. 그러니깐 int *c; 를 했을때, c 는 200번지의 주소값을 가지고 있는거고, 그 200번지에는 일반적인 값이 아닌 주소값을 가지게 됩니다. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-PRp3Ah7yBNY.html 이 영상을 한번 참고해주시면 좋을 듯 합니다. 감사합니다. ^^
음...포인터 변수에 값을 넣는건 가능합니다. 헌데 그렇게 넣으면 완전히 이상한 결과가 출력되어서, 프로그램을 할때도 그런건 염두에 두고 개발을 합니다. ^^ 일반값을 넣으면 사람이 알수 없는 이상한 메모리 영역을 참조해버리는 상황이 발생을 할 수 있어서요~~ 감사합니다. ^^
11:03 문제 질문이 있습니다. int *C = &B; 문장이 있는데, 이러면 C가 아니라, *C에 B의 주소(&B)가 대입되어서 *C를 출력하면 B의 주소(괴상한 값)이 출력되어야 하는 것 아닌지요? 먼저 int *C;를 선언한뒤 C=&B;이렇게 대입해줘야 문제의 답과 같은 결과가 출력되지 않는지 의문입니다.
@@HeungSsaem 친절한 답변 감사합니다. 문법적인 내용이었군요! 그리고 ㅠㅠ 아까 1강에서 곧 내려갈수도있다고 답변해주셨던데 혹시 언제 내려가나요 ㅠㅠ 이번달까진 다 들을 것 같은데... C언어 쭉 듣고있는데 강의력이 좋으셔서 유료로 정처기 실기 강의도 한번 들어보고자 합니다! 좋은 강의 감사합니다
안녕하세요~~~ b는 일반 변수이기 때문에 메모리 어딘가에 b라는 영역이 만들어지게 되고, 그 공간에 10이라는 값이 할당이 됩니다. 이때 b 라는 변수가 메모리의 103번지에 있다고 가정을 하고 있습니다. 그리고 a 는 포인터 변수가 됩니다. 포인터 변수는 메모리의 주소값을 가지게 됩니다. a = &b 를 했기 때문에, b 가 위치하고 있는 곳의 주소값 103번지를 a 에 대입하게 됩니다. a 와 *a 는 공간의 차이가 아니라, a 는 메모리 어딘가에 그냥 변수처럼 공간이 만들어지게 되는거고, *a 는 그 a 변수 공간에 있는 주소값의 값을 나타내게 됩니다. printf("%d ",a) = 103 printf("%d ",*a) = 10 printf("%d ",b) = 10 그리고 이 부분까지는 맞지만, *b 는 전혀 엉뚱한 결과가 나오게 됩니다. b는 포인터변수가 아닌 일반 변수입니다. 포인터 변수만, 해당 변수내에 주소값이 들어가게 되고, 가리키고 있는 주소의 값을 출력하기 위해서 *a 형태를 사용하게 됩니다. 감사합니다. ^^
안녕하세요~~ 컴파일러의 특성때문에 주소값을 지정받지 못해서 오류가 발생할 수 있습니다. 이 코드는 정확하게 수행을 하려고 하는 목적이 아니라, 포인터에 대한 이해를 하려고 하는 목적이기 때문에, 비쥬얼 스튜디오에서는 오류가 발생할 수 있고, C 컴파일러에서도 원하지 않는 이상한 값이 출력될 수 있습니다. 감사합니다. ^^
3번째 듣고있습니다. 6분32초쯤에 printd(%d,a) 는 102라는 거는 자기가 임의로 지정한 값이니깐 101이 될수도 있고 103 104 105 이런식으로 나올 수 있는건가요?? 그리고 선생님 유료강의도 듣고있는데 프로그래밍은 바로 문제로 들어가시던데 이걸 먼저 듣는게 맞죠??
안녕하세요~~~ 번지수는 임의로 지정을 하는거기 때문에 뭘로 해도 상관은 없습니다. 그리고 기사강의에 보면 NEW 라고 해서 지금 업로드 되고 있는 강의가 있습니다. 그걸 바로 봐주시면 됩니다. 깨알 C언어나 다른 문제들에서 질문 주신 내용들을 바탕으로 좀 더 쉽게 설명을 하고 있거든요~~~ 그걸 바로 봐주세요~~ 감사합니다. ^^
질문이 있습니다! a앞에 *가 붙으면 a주소가 가리키는 값이라고해서 10:00문제는 이해했는데요, 그래서 13:00문제에 c주소가 가리키는 값에 b의 주소가 들어간다고 생각했습니다 근데 왜 c에 b의주소가 들어가는 건지 이해가 안됩니다ㅠ 바로 앞 문제에서는 a=&b 이고 여기서는 *C=&B 인데 왜 같은 방식으로 풀이되나요??
안녕하세요~~~ 이게 선언의 문제인데요.. 포인터 변수를 최초로 선언할때만, * 를 이용해서 주소를 할당할 수 있습니다. int *a = &b; 처음에만 b의 주소를 a 에 할당하게 되고요.. 그 이후에 사용되는 *a 는 a 주소값의 값이 됩니다. 선언이후에 주소를 넣으려면, int *a; a = &b; 이렇게 사용해야 합니다. *a = &b; 이렇게 하게 되면, a의 값에다가 b의 주소값을 넣는 형태이기 때문에 이상한 결과가 나오게 됩니다. 감사합니다. ^^
안녕하세요~~~ c는 101이라는 값을 가지고 있습니다. 그래서 printf(c) 라고 가정한다면 101이 출력이 되지요. 헌데, printf 할때, c주소가 가리키고 있는 주소의 값을 출력해라 라고 하는, *c 라고 했기 때문에 b 변수의 값이 출력되게 됩니다. 도움이 되셨음 좋겠습니다. ^^
안녕하세요! c언어 배운지 이제 2달이 다 되어가네요 다른 학원에서 강의 듣는데 템포가 너무 빨라서 모르는 부분을 집고 가기 어려워서 유튜브로 찾다보니 알게 되었습니다!! 아직 끝까지 수강듣지 못했지만 너무너무 이해하기도 쉬워서 좋아요 :) 이제 학원에서 한창 다차원 포인터를 배우는 중인데 malloc?? 동적 할당메모리 이였나? 배우는 중인데, 머리로는 이해는 되는데 코딩으로 구현하기가 너무 어렵더라구요. 혹시 이 부분에 대해서도 이론적으로나마 강의를 올려주실 수 있을까요? 아니면 다른 유료강의가 있으신가요? 선생님 덕분에 c언어가 한 걸음 더 가벼워졌어요, 60강의까지 힘차게 달리겠습니다! 감사합니다~
안녕하세요~~~ 2개월동안 공부하셨다면 국비지원 과정을 듣고 계신건가요?? malloc 함수가 워낙에 여러군데 사용이 되어서, 예제를 좀 주신다면 그거에 대해서는 따로 답변을 해드릴께요..^^ C언어 어렵지만, 익숙해지면 어떤 문제도 쉽게 푸실 수 있을꺼에요.. 그리고 제가 C언어 개념은 따로 강의하지 않고 시험용으로만 강의를 촬영해서, 개발과정을 들으신다면 제가 진행하는 유료강의가 크게 도움이 되시진 않을꺼에요. 공부하시다가 모르는 부분은 예제를 보내주세요..^^ 감사합니다. ^^
@@HeungSsaem 정산기 취득 목적으로 원래 국비과정으로 들으려고 했었는데 이전에 받은적이 있어서 전액지원이 불가능 한 상태여서 무작정 정처기공부하는 것 보다는 c언어나 자바, sql듣고 정처기 수업 듣는게 정처기 시험 준비하는데 좋을거다라고 하시면서 따로 학원강의 끊어서 듣고 있습니다! c언어 프로그래밍은 그 과정에서 하다보니 재밌어서 유튜브로 따로 강의 찾아보다가 홍달쌤영상이 가장 저에게 코드가 맞아서 편하게 듣고있어요~ :) 이 예시는 /*동적 메모리를 할당을 사용하여 입력 및 출력하기*/ 라고 해서 주신 예제이신데 실행시켜도 오류가 나고 동적 메모리에 대한 기초적인 코딩 구조, 동작이해도등이 이해가 안가서 이걸 봐도 어떻게 동작하는지 조차 몰라서 질문을 여쭤봤습니다! #include #include void main() { char* pname = (char*)malloc(32); if (pname == null) { printf("err!! "); } printf("name?"); scanf_s("%s", pname, 32); printf("my name is %s", pname); free(pname); }
안녕하세요~~~ %p 면 주소값을 헥사 값으로 표현하는건데, 아마 %d 가 안되는건 그만한 값을 표현할 수가 없어서 일꺼에요~~ ideone.com 이런 웹 컴파일러를 이용하시면 컴파일 버전 문제는 나오지 않을꺼에요~~ 여러 웹 컴파일러가 있으니 그런걸 활용해주세요 감사합니다. ^^
깨알 C언어 | 23. 포인터 # 포인터란? 1:23 메모리의 주소값, # 포인트 변수 선언 2:02 정답 int *a(포인터 변수 선언) 이후 부터는 *a? a의 값은, a가 가지고 있는 주소값에다가 포인트 변수 선언과 동시에 어떤 주소값과 매칭이 됌// 배열과 비슷, 값 자체가 아니라 레퍼런스를 참조, a? 레퍼런스 출력 a*? 레퍼런스의 값을 출력 # 변수의 주소 찾기 7:04 정답 모든 변수는 주소값을 가지고 있다, #a=&b? b의 주소값, 문. 10:45 정답 &B? B의 주소값, 답. 15:30