Pointers
C언어의 자료형은 기본 자료형과 참조 자료형으로 나뉜다.
기본 자료형은 프로그램 상에서 실제로 사용 할 값을 의미한다.
참조 자료형은 프로그램 상에서 실제로 사용 할 값이 저장되어 있는 기억공간의 주소값을 의미한다.
기본자료형 변수를 일반 변수를 일반 변수, 참조자료형 변수를 포인터 변수라고 부른다.
포인터 변수에 담을 기억공간의 주소값은 &연산자로 알아올 수 있다
포인터 변수는 *를 붙혀서 선언한다.
1 2 3 4 5 6 7 8 9 10 | int main(int argc, char const *argv[]) { int a = 100; //일반 변수 int *b; //포인터 변수 , Integer 타입의 주소값이다. *b = &a; //a의 주소값이 대입 printf("a : %d\n", a); //100 printf("b : %d\n", b); //6487620 return 0; } | cs |
포인터 변수를 사용할 때 *연산자를 사용하면 포인터 변수에 들어있는 주소값을 가져오고 주소값을 통해 기억장소에 접근하여 해당 변수를 사용할 수 있다.
다시 정리하면 현재 a라는 공간에 100이라는 값이 들어있고, b에는 a공간의 주소값이 들어있다.
포인터 연산자를 붙혀(*b) 그 주소값을 통하여 접근 기억장소의 값을 알아 낼 수 있다.
1 2 3 | printf("a : %d\n", a); //100 printf("b : %d\n", b); //6487620 printf("b : %d\n", *b); //100 | cs |
a와 *b의 값이 같다.
1 2 3 4 5 6 7 8 9 10 11 12 | int main(int argc, char const *argv[]) { int a = 100; int *b; int c = a; c = 1000; printf("a : %d\n" ,a); //100 printf("c : %d\n" ,c); //1000 return 0; } | cs |
변수 c에 a의 값을 대입하고, 다시 Line7에서 1000을 c에 대입 하였다.
출력 결과는 100과 1000으로 나온다.
1 2 3 4 5 6 7 8 9 10 11 | int main(int argc, char const *argv[]) { int a = 100; int *b; *b = 2000; printf("a : %d\n" ,a); //2000 printf("b : %d\n" ,*b); //2000 return 0; } | cs |
a에는 100대입 되어있고, b에는 a의 주소값이 들어가있다.
Line6에서 b에 대입되어있는 a의 주소값을 통하여 a에 접근하여 값을 2000으로 바꾸었다.
그렇기 때문에 변수 a의 값 또한 2000으로 바뀌게 되었다.
NULL
포인터 변수를 서언하고 기억공간의 주소값을 넣지 않을때는 NULL값을 넣어준다.
포인터 변수 선언 후 주소값을 넣지 않으면 예상하지 못한 값이 들어 있을 수도 있기 때문이다.
NULL은 의마가 없는 값을 의미
기본 자료형에서는 void, 참조 자료형에서는 NULL을 사용한다.
0과 NULL의 차이점은 사진 1장으로 대체한다.
'Programming > C++' 카테고리의 다른 글
[C++] 오버로딩이 불가능한 연산자 종류 (0) | 2018.04.16 |
---|---|
[C++] public / protected / private (0) | 2018.04.16 |