3.1 포인터란
- 포인터 변수란 메모리 공간의 주소를 저장하는 변수이다.
- 변수 이름 앞에 &연산자를 붙이면 해당 변수의 시작 주소를 반환
- 포인터 변수가 저장하는 변수의 주소에 저장된 값을 참조하려면 *연산자를 사용
3.2 포인터 변수의 선언과 사용
Int* pointer = NULL;
자료형 포인터변수이름 널포인터설정
*NULL포인터는 포인터 변수에 아무 주소도 저장하지 않겠다는 의미이다. NULL포인터를 사용할 때는
대문자로 써야 한다.
- 포인터 변수에 어떤 변수의 주소를 저장하느냐에 따라 간접 접근하는 대상이 바뀐다.
(*&*&a 나 &*&a와 같은 코드의 해석 :
*&는 서로 상쇄되기 때문에 *&*&a == a 이고 &*&*a == &a가 성립된다.)
3.2.3 잘못 사용된 포인터
- 포인터 변수에 주소를 저장하지 않은 경우
- 포인터 변수에 임의로 주소를 저장(초기화)한 경우
3.3 다차원 포인터 변수의 선언과 사용
- 1차원 포인터 변수의 선언은 자료형 다음에 * 연산자를 한 개 붙이고,
2차원 포인터 변수의 선언은 자료형 다음에 * 연사자를 두 개 붙이고,
3차원 포인터 변수의 선언은 자료형 다음에 * 연산자를 세 개 붙인다.
(1차원 : int* p1 = NULL;
2차원 : int** p2 = NULL;
3차원 : int*** p3 = NULL;)
- 다차원 포인터 변수란 포인터 변수의 주소를 저장하는 변수이다.
: 1차원 포인터 변수는 일반 변수의 주소를 저장하는데
2차원 포인터 변수는 1차원 포인터 변수의 주소를 저장한다.
3차원 포인터 변수는 2차원 포인터 변수의 주소를 저장한다….
3.3.1 다차원 포인터 변수의 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h> int main( ) { char c1='A'; char* cp=NULL; char** cpp=NULL;
cp=&c1; cpp=&cp;
printf("%c %x %x \n", c1, cp, cpp); // 각 변수에 저장된 데이터 출력 printf("%x %x %x \n", &c1, &cp, &cpp); // 각 변수의 주소 출력 printf("%c %c %c \n", c1, *cp,**cpp); // 문자 A 출력
return 0; }
|
14행에
- *cp의 의미
: 1차원 포인터 변수 cp에 &c1(변수 c1의 주소 , 12ff63)이 저장되어서 *cp == *&c1이 성립.
*&을 상쇄하면 c1만 남는다. 결국 *cp == c1이다
- **cp의 의미
: 2차원 포인터 변수 cpp에 &cp(cp메모리의 주소, 12ff54)가 저장되어서 **cpp == **&cp와 같다. *&는 서로 상쇄되므로 *cp만 남는다. 다시 1차원 포인터 변수 cp는 &c1을 저장하여서 *cp == *&c1이 성립되고 *&는 서로 상쇄되므로 결국, *cp == c1이 되고 **cpp == *cp ==c1이 된다.
3.4 주소의 가감산
: c언어에서 배우는 자료형은 모두 주소를 가지며 주소의 가감산이 가능하다. 가각의 주소를 가감산하면
자료형의 크기에 따라 결고가 다를 수 있다.
*(array + i) == array[i] == *&array[i]
3.4 함수 포인터
- 함수 이름은 함수의 시작 주소이다.
- 함수 포인터란 함수의 시작 주소를 저장하는 변수이다.
선언 : int (*pointer)(int,int)
C언어본색 Part2 제3장 포인터란 무엇인가.docx
'공부해요 > C' 카테고리의 다른 글
[ c++ 더쉽게,더깊게 ] ch2 . c++의 기초 ~ p33 (0) | 2014.08.21 |
---|---|
[ c++ 더쉽게,더깊게 ] Debug uses an invalid compiler. Probably the toolchain path within... (0) | 2014.08.20 |
[ 열혈강의 C언어본색 ] Part2 제2장 다차원 배열이란 무엇인가 (0) | 2014.08.14 |
[ 열혈강의 C언어본색 ] Part2 제1장 1차원 배열이란 무엇인가 (0) | 2014.08.14 |
[ 열혈강의 C언어본색 ] Part1 제9장 함수란 무엇인가 (0) | 2014.08.14 |