본문 바로가기

c&c++

포인터 기초

 

- 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