묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
Hybrid Processor가 Co processor 보다 좋은 이유
안녕하세요 맛비님. 좋은 강의 해주셔서 감사합니다. 다름이 아니라, AMD와 Xilinx가 2020년에 인수합병으로 CPU 안에 FPGA 요소를 포함시킨 새로운 Architecture인 Co-processor를 특허로 낸 반면에, 삼성의 엑시노스는 ARM의 CPU IP, AMD와 협업한 GPU, 자체 NPU등 각각의 IP를 한 Chip에 배치시킨 Co processor 가 아닌 Hybrid processor라고 볼 수 있을 것 같습니다. 여기서 의문은 왜 Co processor가 Hybrid processor 보다 좋은지 잘 모르겠습니다. 이에 대한 생각이 어떠신지 궁금합니다! 감사합니다.
-
미해결[핵집] 2025 빅데이터 분석기사(필기)_과목 3~4
교재파일 부탁드려요
leehwan@lgcns.com이구요 파일은 1~4 통합본 pdf로 받을수 맀을까요? funtaland@gmail.com입니다
-
미해결파이썬 텍스트 분석 입문 - 데이터 수집부터 분석까지
Re. Konlpy 설치오류(Okt 오류)
답변에 나온 방법을 토대로 파이썬, java, JPype, jupyter를 모두 제거한 후 재설치를 진행했습니다.python 설치 : 3.8.9 버전으로, python.org에 접속하여 인스톨러로 설치했습니다.cmd 상에서 python --version 입력하였을 시, python 3.8.9가 나오는 것을 확인했습니다.java 19.0.2를 검색하여, oracle 사이트에서 설치파일 다운로드 받아 설치하였습니다. 윈도우 64bit 버전으로 설치했습니다..시스템 환경변수 설정을 했습니다.Jpype를 말씀해주신 버전과 같은 버전으로 설치했습니다.cmd 상에서, pip install konlpy로 설치하였습니다.konlpy 설치 후 알려주신 방법을 따랐지만 기존과 같이 okt = Okt()상에서 에러가 발생합니다. 추가적으로 kkma, hannanum을 실행해보았지만 같은 에러가 발생합니다.
-
해결됨Do it! 알고리즘 코딩테스트 with JAVA
시간복잡도 강의 질문
시간복잡도 강의에서 n이 100만일 때를 가정해서 설명해주셨고, 상수는 무시한다라는 걸 확인했습니다. 만약, 0부터 n까지 도는 for문 하나가 100만개 있다고 가정하면, 이것 또한 상수를 무시해서 Big-O 표기법으로 O(N)이 되나요? 아니면 N * N이 되므로 O(N^2)이 되나요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
graphql-codegen 설치 yml 파일 에러
안녕하세요!yarn add -D @graphql-codegen/cliyarn add -D @graphql-codegen/typescript 설치 후 yml 파일 생성하는데 빨간줄이 발생하고 이후 단계로 넘어가지 못합니다.마우스 오버 후 에러 메세지잘못 설치했나 싶어 node-modules 삭제 package.json 에서 codegen 지우고 재설치 해보아도 같은 에러가 나타납니다.확인 부탁드립니다.
-
미해결스프링 핵심 원리 - 기본편
RateDiscountPolicyTest 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]int discount = discountPolicy.discount(member, 10000); 여기에서 member부분이 오류가 납니다.java: cannot find symbol symbol: variable member location: class hello.core.discount.RateDiscountPolicyTest이렇게 나오는데 뭐가 문제인가요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
결과가 이상해요
안녕하세요, 열정적인 마음으로 수업 듣고 있습니다. 결과가 왜 이렇게 깔끔하지 않고 더럽게(?) 나올까요?그리고 END 옵션을 했는데도 줄바꿈이 자동으로 되어버리는데 왜이럴까요?
-
해결됨데이터 분석 SQL Fundamentals
1997년 이후에 단 한건도 주문하지 않은 고객 정보
안녕하세요. 강의 듣고 실습문제를 따로 풀어보고 있는데요1997년 이후에 단 한건도 주문하지 않은 고객 정보에 대해저는 아래와 같이 인라인뷰를 안쓰고 바로 left 조인으로 했는데요.이렇게 풀이를 해도 상관없을까요? 실행결과 자체는 같은데 혹시 먼가 빠뜨리거나 잘못생각하고 있는게 있나 궁금해서 문의드립니다. 풀이SELECT *FROM NW.customers ALEFT JOIN NW.orders BON A.customer_id = B.customer_idAND B.order_date >= TO_DATE('19970101', 'YYYYMMDD')WHERE B.customer_id IS NULL 정답select *from nw.customers aleft join (select customer_id from nw.orderswhere order_date >= to_date('19970101', 'yyyymmdd')group by customer_id) b on a.customer_id = b.customer_idwhere b.customer_id is null;
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
시뮬레이터 최상단
코드작업한다고 android studio를 누르면 시뮬레이터가 안드로이드 스튜디오 뒤로가서 안보여지는데 강의에서는 코드수정하더라도 시뮬레이터가 스튜디오 위에 항상 존재하더라구요!?혹시 어떻게 하신건지 여쭤봐도 될까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다
function solution(s, arr){ let answer = 0; let delivery = [] let prods = [] let max = arr[0][0] for(let i=0; i<arr.length;i++){ prods.push(arr[i][0]) delivery.push(arr[i][arr[i].length-1]) for(let j=0; j<arr[i].length;j++){ if(max <= arr[i][j]){ max = arr[i][j] } } } const res = prods.map((x,idx)=>{ if(x== max){ x = x/2 } return x+delivery[idx] } ).sort((a,b)=> a-b) res.reduce((acc,cur)=>{ if(acc<= s){ answer ++ } return acc+cur },res[0]) return answer } let arr=[[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]]; solution(28, arr)할인을 위 코드 처럼 가장 가격이 큰 상품에 다가 적용했는데 이런 경우 예외 케이스가 발생할까요?
-
미해결[백문이불여일타] 데이터 분석을 위한 중급 SQL
쿼리의 실행 순서 질문입니다.
eranings 라는 별명을 SELECT 절에서 지정해줬는데 GROUP BY가 먼저 실행되는 것 아닌가요?컴퓨터는 earnings 를 어떻게 알고 GROUP BY 할 수 있는건가요?
-
미해결내 업무를 대신 할 파이썬(Python) 웹크롤링 & 자동화 (feat. 주식, 부동산 데이터 / 인스타그램)
셀레니움 변경점
https://selenium-python.readthedocs.io/locating-elements.htmlfind_element/s 함수에 변경점이 생겨 현재 교재로는 코드가 작동하지 않습니다.위 페이지 참고하시면 되겠습니다.
-
미해결인공지능 기초수학
강의교안 부탁드립니다
수강신청하였습니다! 강의교안 부탁드립니다. rhaxodl1104@gmail.com
-
해결됨홍정모의 따라하며 배우는 C++
얕은 복사시 소유권 박탈에 관한 질문
#include <iostream> //#include "autoptr.h" #include "autoptr2.h" #include "resource.h" #include "Timer.h" AutoPtr<Resource> generateResource() // AutoPtr<Resource> 타입을 리턴하는 함수 { // 10000000 의 length를 가진 Resource타입의 멤버를 가지는 AutoPtr 객체 생성 AutoPtr<Resource> res(new Resource(10000000)); return res; } int main() { using namespace std; streambuf* orig_buf = cout.rdbuf(); // cout.rdbuf(NULL); 화면에 출력되는 메세지들 끄기. 시간 어마어마하게 걸릴테니까 😎 Timer timer; { AutoPtr<Resource> main_res; main_res = generateResource(); // ⭐ generateResource() 리턴값은 R-value } cout.rdbuf(orig_buf); //cout << timer.elapsed() << endl; timer.elapsed();//실행시간 재서 출력 } 메인.cpp#pragma once #include <iostream> using namespace std; template<typename T> class AutoPtr { public: T* m_ptr; public: AutoPtr(T* ptr = nullptr) :m_ptr(ptr) { cout << "AutoPtr default constructor" << endl; } ~AutoPtr() { cout << "AutoPtr destructor" << endl; if (m_ptr != nullptr) delete m_ptr; } AutoPtr(AutoPtr&& a) // ⭐이동생성자⭐ : m_ptr(a.m_ptr) // ⭐얕은 복사⭐ 그냥 대입만 하면 땡이다! { cout << "AutoPtr move constructor" << endl; a.m_ptr = nullptr; // really necessary? } AutoPtr& operator = (AutoPtr&& a) //R-value 레퍼런스 , ⭐*이동 대입 연산자 오버로딩⭐ { cout << "AutoPtr move assignment" << endl; if (&a == this) return *this; // 공간은 비워줘야하는 것 똑같고 (delete 안하고 그냥 대입하면 메모리 누수가 발생할 수 있다) if (m_ptr != nullptr) delete m_ptr; m_ptr = a.m_ptr; // ⭐얕은 복사⭐ 그냥 대입만 하면 땡이다! a.m_ptr = nullptr; // 소유권 박탈 return *this; } T& operator *() const { return *m_ptr; } T* operator ->() const { return m_ptr; } bool inNull() const { return m_ptr == nullptr; } };AutoPtr.h#pragma once #include <iostream> using namespace std; class Resource { public: int* m_data = nullptr; unsigned m_length = 0; public: Resource() // 기본 생성자 { cout << "Resource constructed" << endl; } Resource(unsigned length) // 일반 매개변수 1개 생성자 { cout << "Resource length constructed" << endl; this->m_data = new int[length]; this->m_length = length; } Resource(const Resource& res) // 💎복사 생성자💎 { cout << "Resource copy constructed" << endl; Resource(res.m_length); for (unsigned i = 0; i < m_length; ++i) // 내용물을 전부 깊은 복사 (시간이 꽤 걸림) m_data[i] = res.m_data[i]; } ~Resource() // 소멸자 { cout << "Resource destroyed" << endl; } Resource& operator = (Resource& res) // 💎대입 연산자 오버로딩💎 { cout << "Resource copy assignment" << endl; if (&res == this) return *this; // 대입하려는게 자기 자신이면 아무것도 안함 if (this->m_data != nullptr) delete[] m_data; // 1. 내 자신의 m_data 비워주기 m_length = res.m_length; // 2. 대입으로 넘겨받은 res의 length 로 내 length 갱신 m_data = new int[m_length]; // 3. 비워진 내 자신의 m_data에 새로운 공간 할당받기 for (unsigned i = 0; i < m_length; ++i) // 4. m_data내용물 넣기. m_data[i] = res.m_data[i]; // 대입으로 넘겨받은 res의 m_data 내용물들을 **내 m_data**에 깊은 복사 return *this; } };Resource.h 위 3코드는 수업에 나온 코드입니다. 얕은 복사시에 강사님께서 소유권 박탈의 목적으로 매개변수로 받은 참조 객체의 private변수인 포인터변수를 꼭 nullptr로 초기화를 해주는것이 깔끔하다고 하셨습니다.예를 들면AutoPtr(AutoPtr&& a) // ⭐이동생성자⭐ : m_ptr(a.m_ptr) // ⭐얕은 복사⭐ 그냥 대입만 하면 땡이다! { cout << "AutoPtr move constructor" << endl; a.m_ptr = nullptr; // really necessary? }이나AutoPtr& operator = (AutoPtr&& a) //R-value 레퍼런스 , ⭐*이동 대입 연산자 오버로딩⭐ { cout << "AutoPtr move assignment" << endl; if (&a == this) return *this; // 공간은 비워줘야하는 것 똑같고 (delete 안하고 그냥 대입하면 메모리 누수가 발생할 수 있다) if (m_ptr != nullptr) delete m_ptr; m_ptr = a.m_ptr; // ⭐얕은 복사⭐ 그냥 대입만 하면 땡이다! a.m_ptr = nullptr; // 소유권 박탈 return *this; }이 부분에서 a.m_ptr=nullptr;이렇게요. 질문1. nullptr로 초기화를 안시키면(소유권 박탈을 안하면) 문제가 생기나요?2.제가 찾아보니까 "박탈 시키지 않으면 대입 연산자 인수로 이 인스턴스를 참조 하게 된 매개 변수 AutoPtr && a가 대입 연산자 호출이 종료됨에 따라 소멸자가 호출되어 delete될 수 있기 때문이다." 라는 글을 어디서 봤는데 이게 무슨말인지 모르겠는데 맞는 말인가요??3.저 위의 코드에서 혹시 매개변수로 기능하는AutoPtr && a같은 매개변수 객체도 함수 호출시에정식적인 객체 처럼 생성자와 소멸자를 호출하나요?안하는걸로 알고있고 안하기 때문에 2번 질문이 이해가 안되서 질문하는거거든요.혹시 제가 햇갈리고 있나 싶어서 다시 질문드립니다.
-
미해결홍정모의 따라하며 배우는 C언어
재귀함수에서 출력이 왜 연속으로 이루어지는지 모르겠습니다
void print_binary_rc(unsigned long n){int i = n % 2;if (n > 1)print_binary_rc(n / 2);printf("%d", i);}이게 강의에서 설명해주신 코드였습니다 강의에서 쓰신 print_binary 재귀함수를 그냥 Print_Binary_by_ReCursion의 약어로 pbrc로 표현했습니다.이건 재귀함수가 이루어지는 과정을 제가 생각한 방식대로 도식화 한 것입니다. 인셉션을 예로 들어 설명해주신 것철머 함수 안의 함수 안의 함수 안의 함수가 이루어진다는 것을 확인했습니다.제가 궁금한 것은 위 그림에도 적었듯이 n=1까지 와서 더 이상 n>=2가 되지 않아 if문을 탈출하고 pritnf("%d", i);를 만나게 되는데 그때 맨처음으로 i=1이 출력되는 것은 이해가 되었습니다. 하지만 위 도식의 화살표가 가르키는 것처럼 왜 그 다음 i=0이 출력되는 것인지 모르겠습니다.if 문을 탈출한 것은 n=1인 순간 뿐인데 왜 그 위 과정에서도 i=0을 프린트하게 되는 것인지 궁금합니다. 디버거로 찍어도 잘 안 보여서 질문드립니다. 만약 pbrc(2)가 pbrc(1)의 과정도 포함하고 있어서 프린트를 하는 것이라면pbrc(1)에서 i=1이 출력되고pbrc(2)에서 i=1 i=0이 출력되고pbrc(3)에서 i=1 i=0 i=1이 출력되고pbrc(4)에서 i=1 i=0 i=1 i=0이 출력되어버려서총 1 10 101 1010 라는 10자리 숫자가 출력되어야 한다고 생각이 들어서 이해를 도와주시면 감사하겠습니다 ++ 혼자 고민을 더하다가 제 나름의 답을 얻었는데 혹시 pbrc(1)에서 i=1을 출력하고 나면 이제 그 상위의 pbrc(2)의 단계에서 if문의 반복을 모두 마쳤으니 i=0을 출력하고 그리고 나서 pbrc(5)의 단계에서 if문 반복을 모두 마쳤으니 if를 탈출해 밑에 있는 i=1을 출력하고 마지막으로 pbrc(10)의 영역에서 if문을 모두 마쳤으니 밑의 i=0을 출력한다고 봐야 할까요? 이해가 될 듯하면서도 물고늘어지면 이해가 안됩니다
-
해결됨웹 게임을 만들며 배우는 React
강의 3-4. 컴포넌트 분리와 props에서 분리된 컴포넌트에 this바인딩이 되나요?
Try.jsx 에서 {this.props.value}를 사용하는데 이때 this는 Try컴포넌트에 바인딩 된다고 생각하는데 NumberBaseball.jsx 컴포넌트의 render함수에서 상위로 스코프가 체이닝 되나요? 정리하면 컴포넌트를 import 해서 사용할 때 this바인딩이 <Try />컴포넌트의 this는 어떻게 바인딩 이루어져서 props를 받을 수 있는지 궁금합니다 ㅠ
-
미해결화이트해커가 되기 위한 8가지 웹 해킹 기술
칼리리눅스 eth1 ip
etc/network/interfaces에 강의에서 설명하신 부분을 추가하였는데도 ip addr로 확인해보면eth1에는 ip가 할당되지 않습니다ㅠㅠ 어떻게 해야하나요? systemctl restart networking으로 네트워크를 재시작해도 안되고 아예 재부팅해도 안되네요...
-
해결됨홍정모의 따라하며 배우는 C++
수업시간 코드인데 결과값이 왜 이렇게 나오는지 궁금합니다.
#include <iostream> #include "autoptr.h" //#include "autoptr2.h" #include "resource.h" #include "Timer.h" AutoPtr<Resource> generateResource() // AutoPtr<Resource> 타입을 리턴하는 함수 { // 10000000 의 length를 가진 Resource타입의 멤버를 가지는 AutoPtr 객체 생성 AutoPtr<Resource> res(new Resource(10000000)); return res; } int main() { using namespace std; streambuf* orig_buf = cout.rdbuf(); // cout.rdbuf(NULL); 화면에 출력되는 메세지들 끄기. 시간 어마어마하게 걸릴테니까 😎 Timer timer; { AutoPtr<Resource> main_res; main_res = generateResource(); // ⭐ generateResource() 리턴값은 R-value } cout.rdbuf(orig_buf); //cout << timer.elapsed() << endl; timer.elapsed();//실행시간 재서 출력 }메인.cpp#pragma once #include <iostream> using namespace std; template<typename T> class AutoPtr { public: T* m_ptr; public: AutoPtr(T* ptr = nullptr) :m_ptr(ptr) { cout << "AutoPtr default constructor" << endl; } ~AutoPtr() { cout << "AutoPtr destructor" << endl; if (m_ptr != nullptr) delete m_ptr; } AutoPtr(const AutoPtr& a) // 💎복사 생성자💎 { cout << "AutoPtr copy constructor" << endl; // deep copy m_ptr = new T; // T가 Resource 타입으로 들어오면 m_ptr은 Resource 타입의 포인터 *m_ptr = *a.m_ptr; // ⭐Resource의 '대입 연산자 오버로딩 호출 , deep copy } AutoPtr& operator = (const AutoPtr& a) //L-value 레퍼런스 , 💎대입 연산자 오버로딩💎 { cout << "AutoPtr copy assignment" << endl; if (&a == this) return *this; if (m_ptr != nullptr) delete m_ptr; // deep copy m_ptr = new T; // 새로운 빈 공간 할당 받기. T가 Resource 타입으로 들어오면 m_ptr은 Resource 타입의 포인터 *m_ptr = *a.m_ptr; // ⭐Resource의 '대입 연산자 오버로딩' 호출 , deep copy return *this; } T& operator *() const { return *m_ptr; } T* operator ->() const { return m_ptr; } bool inNull() const { return m_ptr == nullptr; } };AutoPtr 헤더파일#pragma once #include <iostream> using namespace std; class Resource { public: int* m_data = nullptr; unsigned m_length = 0; public: Resource() // 기본 생성자 { cout << "Resource constructed" << endl; } Resource(unsigned length) // 일반 매개변수 1개 생성자 { cout << "Resource length constructed" << endl; this->m_data = new int[length]; this->m_length = length; } Resource(const Resource& res) // 💎복사 생성자💎 { cout << "Resource copy constructed" << endl; Resource(res.m_length); for (unsigned i = 0; i < m_length; ++i) // 내용물을 전부 깊은 복사 (시간이 꽤 걸림) m_data[i] = res.m_data[i]; } ~Resource() // 소멸자 { cout << "Resource destroyed" << endl; } Resource& operator = (Resource& res) // 💎대입 연산자 오버로딩💎 { cout << "Resource copy assignment" << endl; if (&res == this) return *this; // 대입하려는게 자기 자신이면 아무것도 안함 if (this->m_data != nullptr) delete[] m_data; // 1. 내 자신의 m_data 비워주기 m_length = res.m_length; // 2. 대입으로 넘겨받은 res의 length 로 내 length 갱신 m_data = new int[m_length]; // 3. 비워진 내 자신의 m_data에 새로운 공간 할당받기 for (unsigned i = 0; i < m_length; ++i) // 4. m_data내용물 넣기. m_data[i] = res.m_data[i]; // 대입으로 넘겨받은 res의 m_data 내용물들을 **내 m_data**에 깊은 복사 return *this; } };Resource헤더파일 결과값이AutoPtr default constructorResource length constructedAutoPtr default constructorAutoPtr copy assignmentResource constructedResource copy assignmentAutoPtr destructorResource destroyedAutoPtr destructorResource destroyed 이렇게 나왔습니다.여기서 궁금한점은 소멸자 출력문구 순서인데요디버깅을 해봤는데Timer timer;{AutoPtr<Resource> main_res;main_res = generateResource();}이 지역범위를 벗어나고 소멸자 호출을 시작하는데 정확히 main_res = generateResource(); 이부분에서AutoPtr destructorResource destroyedAutoPtr destructorResource destroyed이 4번의 소멸자가 호출됩니다. 그에 대한 설명을 나름 추리해봤는데 제 설명이 맞는지 확인해주시고 혹시 틀렸다면 정확히 어떤점에서 틀렸고 어떠한 근거로 저 소멸자호출문구가 출력 되는건지 알려주실 수 있나요? 저의 설명==================================AutoPtr destructor >>> generateResource() 함수의 리턴 값인 res를 블럭이 끝나면서 소멸자로 할당값을 해제해주는 과정에서 소멸자 호출 Resource destroyed >>> 소멸자 호출 문구 출력 이후 if (m_ptr != nullptr) delete m_ptr; 구문 실행과정에서 m_ptr이 resource타입이니까 삭제시에 resource 소멸자 호출 AutoPtr destructor >>> main_res 역시 해제하기 위해 autoptr의 소멸자 호출 Resource destroyed >>>소멸자 호출 문구 출력 이후 if (m_ptr != nullptr) delete m_ptr; 구문 실행과정에서m_ptr이 resource타입이니까 삭제시에 resource 소멸자 호출
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
삼각형 띄우기 Shader Create Failed ! 에러 관련.
삼각형 띄우기 학습후 코드 실행시"Shader Create Failed !"라는 메시지가 뜨는 경우가 있습니다.이 경우 혹시 .hlsli 파일을 저장할때인코딩 하여 저장 -> "유니코드(서명 있는 UTF08) - 코드 페이지 65001"로 저장하지 않았는지 확인해 보시면 좋을것 같습니다.이경우 에러가 발생하며,"한국어 - 코드페이지 949" 로 저장시 에러가 발생하지 않더군요.멀티바이트와 유니코드 관련 문제 인것 같고D3DCompileFromFile 을 사용할때 아마 셰이더 파일을 읽어서 Blob 이라는 버퍼에 이진데이터로 직렬화하여 저장을 하는거 같은데,그때 멀티바이트를 직렬화 할때랑 유니코드를 직렬화 할때 값이 달라서 발생하는 문제인것 같은데, 이게 맞는건지. 다른분들은 어떠신지, 같은 문제가 발생하는지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
10.12 2중포인터의 작동원리 질문
10.12 에서 이중포인터 설명하실때int a = 7;int *ptr = &a;*ptr = 8;int *pptr = &ptr;**pptr = 9; 라고 자료화면이 나오면서 설명하시는데y = &x 일때 *y = x , y = &x 라고 알고있는데그렇다면 a = 7 일때 ptr = 7이고 *pptr 도 7이 되야 맞는 문법아닌가요 ?? 제가 잘못알고있는건가요??