변수의 메모리 주소, 값
메모리는 메모리의 값과 메모리의 주소와 같이 저장된다.
실행 결과를 보면 a의 값은 5로 나오고 &a는 a의 주소 값을 출력한다.
이때 주소는 고정된 값이 아니라 컴퓨터마다, 실행할 때마다 달라진다.
*시스템에 따라 32비트 64비트에 따라 메모리의 범위도 달라진다.
포인터란
메모리의 주소값을 저장하기 위함이다.
메모리 값이 변수에 저장되듯 메모리의 주소는 포인터 변수에 저장된다.
포인터 변수 선언
선언 시 포인터 변수를 사용한다.
자료형* 변수명 - int* hi;
자료형 * 변수명 - int * hi;
자료형 *변수명 - int *hi;
세 가지 방식으로 선언 가능하다. 편한 방식으로 사용하면 된다.
포인터는 선언 시 반드시 먼저 초기화되어야 한다. 그렇지 않으면 의도하지 않은 메모리의 값이(쓰레기 값) 변경되기 때문에 오류가 발생할 수 있다.
추후에 값을 넣는다면 처음부터 NULL값으로 최기화 해주는 게 좋다.
사실 좋다기보단 필수라고 생각하는 게 좋다.
ex) int *hi = NULL;
중요 포인트 hi 는 주소 값을 저장하고 *hi는 메모리 주소에 위치한 데이터 값을 나타낸다.
이 부분은 꼭 이해하고 넘어가야 한다.
포인터 연산자(* , &)
정리해보자면
일반 변수나 상수와 포인터 변수의 차이점은 아래와 같다.
여기서 ...
살짝 궁금할 수도 있다.
왜 포인터 변수는 주소인데 자료형이 있는지!
주소는 변수가 할당하고 있는 주소의 가장 처음 주소를 가리킨다.
chat의 경우 1 바이트, int의 경우 4 바이트 등등 자료형에 따라 시스템의 비트에 따라 자료형의 바이트의 크기가 바뀐다.
즉 변수는 일정 크기를 가지고 있다.
포인터 변수는 그 일정 크기를 받기 위해 일부 주소를 확보하기 위해 포인터 변수를 선언할 때 자료형이 필요하다. 자료형이 없다면 컴퓨터는 이 포인터 변수가 어느 정도의 크기를 할당해야 하는지 알 수가 없다.
C언어 - 포인터 활용, call by value, call by reference
'CS > 알고리즘 및 자료구조' 카테고리의 다른 글
C언어 - 포인터 활용, call by value, call by reference (0) | 2020.10.16 |
---|---|
C언어 - 포인터 연산, 포인터와 배열의 관계 (0) | 2020.08.28 |
C언어 메모리 구조 [스택(Stack), 힙(Heap), 데이터(Data)영역] (0) | 2020.08.14 |
C언어 변수의 유효 범위 - 전역 변수, 지역 변수, 정적 변수, 레지스터 변수 (0) | 2020.08.07 |
C언어 - 조합 알고리즘 [nCr] (2) | 2020.07.10 |
댓글