2019.07.03


갤러들이 포인터에서 포기할거라고 하길래 긴장빨고 함




포인터메모리의 주소 값을 저장하기 위한 변수라고 함


포인터는 다른 변수의 주소를 값으로 지니고


타입에 상관없이(char든 int든 double이든) 그 크기가 4바이트라고 함




포인터 변수 pA가 a를 가리키는 예제


포인터를 선언할 때에는연산자를 사용한다고 함


int a는 int형 변수의 주소 값을 지닐 수 있는 int형 포인터

char b는 char형 변수의 주소 값을 지닐 수 있는 char형 포인터

double c는 double형 변수의 주소 값을 지닐 수 있는 double형 포인터


주소 값을 참조할 때연산자를 사용한다고 한다 (a는 변수 a의 주소 값을 반환하라는 의미)


포인터가 가리키는 메모리를 참조하기 위해선연산자를 사용한다고 함




a라는 변수를 통한 접근과 같은 방식은 직접 접근(Direct Access)


pA라는 포인터 변수를 통한 접근과 같은 방식은 간접 접근(Indirect Access)



연산자보다 ++연산자의 우선 순위가 높기 때문에변수를 괄호로 감싸야만 함




pA는 a의 주소값을 갖고 있으므로


포인터 pA가 지니는 주소 값과 변수 a의 주소 값과 동일함


가 붙으면 그 주소 안에 들어있는 값을 참조하라는 의미이므로 2006이 출력된다



다음과 같이 일반 변수와 포인터 변수를 동시에 선언하는 것도 가능하다고 함

int a,pA;


그러나 헷갈릴 수 있으므로 두 줄로 나눠서 쓰라고 한다




포인터에 타입을 나눈 이유는 읽어들일 바이트의 수를 알기 위해서


int 포인터면 4바이트를 읽고, double 포인터면 8바이트를 읽는 것이 그 예



연습문제1인데 혹시 틀린거 있으면 알려주셈


1. p1n의 주소값이 들어감


2. p2에 p1가 가리키는 변수의 주소값, 즉 n의 주소값이 들어감 (p2 =p1으로 하니p2 값이 이상해지더라)


3. p1이 가리키는 변수, 즉 n에 10이 들어가있으므로 10출력하고 +1


4. p2가 가리키는 변수, 즉 n에 11이 들어가있으므로 11출력하고 +1


5. n 은 현재 12이므로 n을 출력하면 12






연습문제2 char형 변수 a, int형 변수 b, float형 변수 c, double형 변수 d를 선언하고

각각을 가리키는 포인터 p1,p2,p3,p4를 선언한 후 간접 접근으로 +1시키래서 짠 코드





연습문제3 간접 접근 방식으로 a, b를 1 감소시키고

포인터 p1와 p2가 가리키는 대상을 서로 바꿔주라고 해서 풀어본 코드





포인터는 메모리의 주소 값을 나타내므로 사용할 때 상당한 주의가 필요


포인터를 선언할 경우 변수의 주소값으로 초기화하는 것이 필수


다음 챕터에선 포인터와 배열의 관계에 대해 나옴






배열의 이름도 포인터이며


단 그 값을 바꿀 수 없는 상수라는 점이 일반적인 포인터와의 유일한 차이점이라고 함



배열 요소의 각 사이즈가 4바이트를 차지하고 있으며


배열 이름첫 번째 요소의 주소 값을 나타냄




포인터와 배열 이름은 통적으로 이름이 있고, 메모리의 주소를 나타내지만


포인터는 변수이고, 배열 이름은 상수라는 것이 차이점





포인터배열의 이름처럼 사용할 수 있다고 함


배열의 이름은 첫 번째 요소의 주소를 가리키는 포인터이므로


ptr = arr같은 표현이 가능





머리 아파서 여기까지 하고 책 바로 덮음