- 1바이트 메모리 공간을 단위로 하나의 주소 값이 할당된다
- 주소 값은 1씩 증가한다
- C언어에서는 시작번지만을 가지고 위치를 표현한다
- &연산자
변수의 주소 값을 얻을 때 사용
피연산자는 반드시 변수이며 상수는 피연산자가 될 수 없다
예)
int a;
int * pnum;
pnum = &a;
- 포인터 또한 변수이므로 어떠한 값을 가진다
- 이 값 또한 메모리에 할당되며 32비트 O.S에서는 4바이트, 62비트 O.S에서는 8바이트 크기를 가진다
하지만 결론적으로 포인터 변수가 가지고 있는 어떠한 값을 알 필요는 없다
- *연산자
포인터 개념에서의 *연산자는 곱셈 연산자가 아니다
메모리에 적혀있는 정보 자체를 의미한다
- 포인터 변수가 포인터 변수를 가리킬 때, 전자는 결국 후자가 가리키는 변수를 가리킨다
예)
int num;
int * ptr1 = #
int * ptr2 = ptr1;
여기서 ptr2는 결국 변수 num을 가리킨다
- 포인터의 형은 메모리 공간을 참조하는 기준이 된다
- 포인터의 형이 존재하는 이유는 포인터 기반의 메모리 접근의 기준을 마련하기 위함이다
예를 들어 어떤 변수 a가 있다고 할 때,
포인터의 형에 따라 지정된 주소로부터 몇 바이트를 읽을지가 결정된다
- 포인터 변수를 초기화하지 않으면 포인터 변수는 쓰레기 값으로 초기화된다.
만약, 포인터 변수를 우선 선언만 해두고 이후에 유효하게 사용할 예정이라면 아래와 같은 초기화를 권장한다
int main(void)
{
int * ptr1 = 0; // ptr1은 아무것도 가리키지 않는다 // 0번지를 의미하는 것이 아니다
int * ptr2 = NULL; // NULL또한 상수 0으로 정의되어 있으므로 ptr2는 아무것도 가리키지 않는다
retrun 0;
}
'c&c++' 카테고리의 다른 글
배열기반의 문자열/문자 표현 (0) | 2021.10.05 |
---|---|
문자 / 문자열 (0) | 2021.10.03 |
[도전! 프로그래밍 1] 문제7번 (0) | 2021.10.01 |
재귀함수의 개념 (0) | 2021.09.30 |
static 선언을 추가한 지역변수 (+register변수) (0) | 2021.09.30 |