상세 컨텐츠

본문 제목

[C]포인터(pointer)

Language/C

by Computer_x86_64 2022. 2. 24. 23:58

본문

 C언어 Pointer

 

C언어에서 두손 두발 들게 하는 포인터란 아이는....어렵다....

이내용을 정리하는 이유도 내가 좀더 남에게 설명함으로써 

나 자신이 더 확실히 이해하기 위해서이다. 

자바를 공부하다 언매이지드 랭귀지를 공부하고싶어 C, C++를 다시 공부한다.

 

어떤 언어를 공부하더라고 메모리 구조는 간략히 알고있어야한다고 생각된다.

물론 이렇게 정리하고 올리는 이유도 내가 공부하기 위해서이다....

 

1. 프로그램과 메모리 

모든 프로그램들은 OS로부터 자신이 사용할 영토를 할당받는다.

A라는 프로그램이 자신이 구동하기 위해서는

OS의 메모리 공간이 A 프로그램의 실행가능 한 사이즈만큼 여유공가닝 있어야한다.

그렇게 공간을 확보한 A 프로그램은 아래 예시와 같은 공간을 할당받는다.

 

* 참고로 실제 메모리는 아래와 같이 할당되지 않는다.

해당 내용은 OS를 공부하면 단편화, 가상 메모리, 페이징, 세그먼테이션 등 을 참조하시길....

 

Memory 구조

Stack : 지역변수, 함수 매개변수, Return 주소. 등 임시로 사용되는 영역, 매개변수와 리턴값은 함수 호출시 생성함수 수행, 종료시 반환된다. (컴파일시 결정)

heap : 동적 할당, 객체에 대한 영역 (런타임중 결정)

DATA {

- bss : 전역으로 선언된 초기화 되지 않은 데이터

- data : 전역변수, 정적변수(static), 배열, 구조체 등....

}

text(code) : Application 실행시킬 바이너리 코드가 올라감. (코드, 함수, 제어문 등)

 

지금 이 메모리를 잘기억해야한다.

다른 언어에서는 메모리를 디테일하게 신경안쓰면 안되지만 C언어 만큼 신경안써도된다. (C++도 제외...)

 

2. 포인터란?

우리집엔 고양이?(돼지)가 있다. 

초반에 레이저포인터로 자주 놀아줬는데 이포인터! 

(고양이 키운다고 자랑하고싶어서 밑밥깜....)

 

특정 위치를 가르키는 것이다. 

비유하자면 건물 주차장이 있다.

나는 주차를 해놓고 쇼핑을하고 돌아와 차가 어디에 있는 지 안보인다. 

그떄 차키로 차를 열면 소리가 난다. 

이런 역할이 포인터  = 차키, 값 = 차, 주차된 공간 = 메모리주소

 

 

#include <stdio.h>

int main() {

	int a = 10;
	int* ptr;
	ptr = &a;

	printf("a value is : %d\n", a); //10
	printf("a address is : %p\n", &a); //0x7fffffffe97c

	printf("ptr pointer : %d\n", *ptr); //10
	printf("ptr value is : %p\n", ptr); //0x7fffffffe97c
	printf("ptr address is : %p\n", &ptr); //0x7fffffffe970
	return 0;
}

Result > 

a value is : 10
a address is : 0x7fffffffe97c
ptr pointer : 10
ptr value is : 0x7fffffffe97c
ptr address is : 0x7fffffffe970

 

1. int a =10;을 초기화함.

2. int* ptr; 이라는 포인터 변수 선언. 

3. ptr변수에 &a 주소를 전달한다. &참조연산자

 

위 결과와 같이 동작한다. 

 littele Endian 방식이라 1byte단위로 거꾸로 저장되어있다. 

 

 

 

 

 

 

 

 

 

<------a 변수의 0a ==10 이다. 

 

 

위와 같이 메모리의 위치를 직접 접근 가능한 언어가 C언어이다.

Pointer의 다양한 사용법에 대해 나중에 다시 올리겠다.!

'Language > C' 카테고리의 다른 글

[C언어]포인터 배열(Pointer Array)  (0) 2022.03.01
[C언어]함수포인터(Function Pointer).  (0) 2022.02.27

관련글 더보기

댓글 영역