일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ipTIME 유무선공유기
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- 1개
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 위드리빙 대용량 옷 수납 방수 바구니
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- 리빙앤트리 펠리컨 박스 대
- 샤오미 미밴드 7 스마트밴드
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- 두칸 프릴 오버핏 후드티
- 삼성 갤럭시워치5
- 8052 블랙라인 정사각 세면기
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- 긍정
- 반스 올드스쿨 VN000D3HY28
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 네스파 다야몬드은박 후드티
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- 올리비아 스텐 세면대 세트
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- ChatGPT
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- Today
- Total
냥집사의 개발일지
C언어 - 포인터 (Pointer) : 기본 개념 본문
안녕하세요~ 오늘은 포인터에 대해서 정리해보려 합니다.
일단 포인터란 말 그대로 무엇을 가리키는 역할을 하는데요.
바로 메모리의 주소를 가르키는 방법입니다.
역시 글로는 와닿지 않으니 예시를 보며 포인터에 대해 알아보겠습니다~

'포인터'는 메모리의 주소를 가리키는 데 그럼 메모리의 주소는 무얼 의미할까요?
메모리의 주소란 변수가 할당된 메모리의 시작 주소를 의미합니다.
아래 코드를 작성해 변수 temp가 할당된 메모리 주소를 출력해보겠습니다!
#include <stdio.h>
int main(){
int temp;
printf("temp's memory address : %u", &temp);
return 0;
}
변수 temp가 할당된 메모리 주소는 1291844428 인 것을 확인할 수 있습니다.
아래는 이해하기 쉽게 temp가 할당된 메모리의 구조를 나타낸 것으로 temp는 int형이므로 4byte
즉 12..28부터 12..31번지 까지 할당된 것을 예상할 수 있습니다.
12..28 | 12..29 | 12..30 | 12..31 | 12..32 | 12..33 |
자, 이제 본론으로 돌아가 포인터를 써서 메모리 주소에 접근해보겠습니다.
코드를 보기 전에 주소 연산자와 간접 참조 연산자에 간단히 알아보겠습니다.
주소 연산자는 &로 &뒤에 변수를 붙여주면 변수의 주소값을 나타냅니다.
간접 참조 연산자는 *로 자료형 + * + 포인터 이름과 같이 포인터를 선언하거나
ex) int *pt : pt라는 int형 포인터를 선언
* + 포인터 이름과 같이 포인터가 가리키는 변수에 접근할 수 있습니다.
ex) *pt = 10 pt라는 포인터가 가리키는 변수에 10을 대입
주소 연산자와 간접 참조 연산자의 자세한 쓰임새는 아래 예제를 통해 다시 한번 정리해보십다!!
1. temp라는 int 변수 선언
2. temp_pointer 라는 int형 포인터 선언
3. temp의 주소를 temp_pointer에 할당한다. (temp_pointer를 통해 temp의 값에 접근할 수 있다)
4. temp_pointer가 가리키는 값 (temp)에 7을 할당한다.
5. temp_pointer가 가리키는 값를 출력한다.
6. temp를 출력한다.
#include <stdio.h>
int main(){
int temp;
int *temp_pointer;
temp_pointer = &temp; // allocate temp's address to temp_poninter
*temp_pointer = 7; // allocate 7 to where temp_pointer pointing : temp
printf("%d\n", *temp_pointer);
printf("%d\n", temp);
}
temp_pointer가 가르키는 값, temp 모두 7을 출력하는 것을 알 수 있습니다.
이를 통해 포인터를 가르키는 변수의 시작 주소를 저장하는 걸 알 수 있습니다.
포인터에 대한 추가 tips
포인터를 선언할 때 자료형과 간접 참조 연산자가 붙어있거나 떨어져 있어도 같은 기능을 합니다!
int *temp_pointer;
int* temp_pointer;
가리키는 자료형과 상관없이 항상 첫 번째 주소만 저장합니다.
char * temp_pointer;
int *temp_pointer;
double * temp_pointer;
포인터 변수 선언과 초기화 동시에 하는 방법
int *temp_pointer = &temp;
const를 사용한 포인터 종류
const는 변수를 상수화 시키는 기능을 합니다.
const를 사용한 포인터는 선언과 초기화가 동시에 이뤄져야 합니다.
temp_pointer1는 상수 포인터로 포인터 변수가 상수입니다.
따라서 temp 이외의 주소 값을 temp_pointer1에 저장할 수 없습니다.
temp_pointer2는 상수에 대한 포인터로 포인터 변수가 가리키는 값이 상수입니다.
따라서 temp_pointer2가 가르키는 값에 다른 변수 및 상수를 저장할 수 없습니다.
(*temp_pointer2 = 10은 안되지만 temp = 10은 가능합니다!!)
temp_pointer3는 상수에 대한 상수 포인터로 상수 포인터 + 상수에 대한 포인터라고 할 수 있습니다.
int* const temp_pointer1 = &temp;
const int* temp_pointer2 = &temp;
const int* const temp_pointer3 = &temp;
오늘은 포인터의 기본 개념을 알아보았습니다.
포인터는 정리해야 할게 정말 많네요ㅠ 여러 차례로 나누어 차근차근 알아보아요~

좋은 하루 보내세요~
'C언어' 카테고리의 다른 글
C언어 - 포인터 (Pointer) : 포인터를 사용하는 이유 (1) (0) | 2022.09.10 |
---|---|
C언어 - 포인터 (Pointer) : 포인터 & 주소 (0) | 2022.09.09 |
C언어 - 배열 (Array) : 문자 배열의 선언 & 초기화 (0) | 2022.09.06 |
C언어 - 배열 (Array) : 배열의 선언 & 초기화 (0) | 2022.09.05 |
C언어 - VSCode C/C++ 개발환경 세팅 : C / C++ Extension 설치 및 json 파일 세팅(Windows) (0) | 2022.09.04 |