포인터를 시작하기에 앞서..
- 지금까지 변수 선언으로 메모리 공간을 확보하고, 그곳을 데이터를 넣고 꺼내 쓰는 공간으로 사용했다.
- 변수명은 그러한 메모리 공간을 식별할 수 있는 이름이었다
- 그러나 변수는 선언된 블록 {} 또는 함수 내부로 사용이 제한되어 있다.
- 그래서 사용 범위를 벗어난 경우도 데이터를 공유할 수 있는 방법인 포인터를 알아야 한다!
<포인터와 연산자>
메모리의 주소, 주소 연산자 &
메모리의 주소
메모리라는 것은 우리가 데이터를 넣고 꺼내 쓰는 공간으로, 그 위치를 식별할 수 있어야 한다
- 프로그램이 사용하는 메모리의 위치를 주소 값으로 식별할 수 있다
- 메모리의 위치를 식별하는 주소 값은 바이트 단위로 구분된다
- 0부터 시작하고 바이트 단위로 1씩 증가하므로 2바이트 이상의 크기를 갖는 변수는 여러 개의 주소 값에 걸쳐 할당된다
int a;
==> int형 변수 a 가 메모리에 100번지부터 할당되었다면 100번지부터 103번지까지 4바이트에 걸쳐 할당된다
==> 즉 주소값 100번지부터 103번지까지를 a라고 칭하는 것이다
a = 10; // 메모리의 100번지부터 103번지까지의 4바이트의 공간에 10을 저장하는 것
a + 20; // 100번지부터 103번지까지 4바이트에 저장된 값과 20을 더하는 연산을 수행
*즉 지금까지 변수명으로 메모리 공간이나 값을 간단히 사용할 수 있었던 것이다
주소 연산자 : &
주소란
변수가 할당된 메모리 공간의 시작 값
주소 연산자 &를 사용하면 변수가 할당된 메모리 공간의 시작 주소 값을 알 수 있다
&a // 주소연산자 + 변수명
#include <stdio.h>
int main(void)
{
int a;
double b;
char c;
printf("int형 변수의 주소 : %u\n", &a); //4바이트
printf("double형 변수의 주소 : %u\n", &b); //8바이트
printf("char형 변수의 주소 : %u\n", &c); //1바이트
return 0;
}
==> 컴퓨터는 프로그램 실행 후 남아있는 메모리를 활용하므로 실행결과가 컴파일 할때마다 바뀌는 게 당연하다
==> 그림에서 보는 바와 같이 반환형의 메모리의 크기만큼 할당된다
'C 언어 > [책 정리] 혼자 공부하는 C언어' 카테고리의 다른 글
포인터 완전 정복을 위한 포인터 이해하기 (1) (0) | 2022.12.21 |
---|---|
포인터의 기본 개념 (2) (0) | 2022.12.20 |
문자를 저장하는 배열 (0) | 2022.12.12 |
배열의 선언과 사용 (0) | 2022.12.12 |
여러 가지 함수 유형 (0) | 2022.12.08 |