일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 텐서플로우
- CV
- 백준
- 시스템프로그래밍
- shell
- 프로세스
- 알고리즘
- 공부
- 회귀
- 백준알고리즘
- error
- OpenCV
- 리눅스
- C언어
- C++
- linux
- python
- Windows 10
- 영상처리
- 턱걸이
- 코딩
- 학습
- Computer Vision
- Windows10
- c
- 딥러닝
- 프로그래밍
- 쉘
- TensorFlow
- 운영체제
- Today
- Total
줘이리의 인생적기
C - 포인터 본문

Index
- 메모리 주소
- &(앰퍼샌드)
- 포인터, 간접 참조 연산자
- 주소와 포인터의 이해(차이, 크기, 사용하는 이유)
1. 메모리 주소
프로그램이 사용하는 메모리의 위치를 주소 값으로 식별할 수 있다.
바이트 단위로 구분되어 진다.
int형 변수 a가 메모리 1000번지부터 할당되었다면 1000부터 1003까지 4바이트로 할당된다.
2. &(앰퍼샌드)
변수가 메모리 어디에 할당되었는지 궁금할 때 주소 연산자(&)를 사용한다.
주소 알아보기 예제
#include <stdio.h>
int main(void)
{
int a;
double b;
char c;
printf("int형 변수의 주소 : %u\n", &a); //%u나 %x로 알아볼 수 있다.
printf("double형 변수의 주소 : %u\n", &b);
printf("char형 변수의 주소 : %u\n", &c);
return 0;
}
실행결과

int형은 6487580부터 4바이트 할당
double형은 6487568부터 8바이트 할당
char형은 6487567부터 1바이트 할당
3. 포인터, 간접 참조 연산자(*)
한 번 구한 주소는 저장해서 사용하는게 편리하다.
변수의 메모리 주소를 저장해주는 변수가 바로 포인터.
(가리키는 변수의 형태가 같을때만 대입해야 한다, 강제 형 변환은 언제나 가능)
포인터 예제
#include <stdio.h>
int main(void)
{
int a;
int* pa = &a; // 포인터 선언, a의 주소 대입
*pa = 1;
printf("포인터 a 값 출력 : % d\n", *pa);
printf("변수로 a 값 출력 : % d\n", a);
return 0;
}
실행결과

즉, 포인터 pa가 할당된 영역에 변수 a가 할당된 영역의 메모리 처음 주소를 저장.
4. 주소와 포인터의 이해(차이, 크기, 사용하는 이유)
주소와 포인터의 차이 : 주소는 변수에 할당된 메모리 저장 공간의 시작 주소 값 자체.
포인터는 그 값을 저장하는 또 다른 메모리 공간.
주소와 포인터의 크기 : 모든 주소와 포인터는 가리키는 자료형과 관계없이 크기가 같다.
포인터를 사용하는 이유 : 예제를 통해 알아보자.
#include <stdio.h>
void swap(int* pa, int* pb); // 함수의 선언
int main(void)
{
int a = 10, b = 20;
swap(&a, &b); // a, b의 주소를 인수로 주고 함수 호출
printf("a: %d, b : %d\n", a, b);
return 0;
}
void swap(int* pa, int* pb)
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
실행결과

보는 바와 같이 a와 b의 값이 바뀌었다.
이 예제는 포인터를 사용하지 않고 구현할 수 있지만 그럴땐 사용 범위가 함수 내부로 제한된다.
포인터를 이용하면 두 변수의 값을 바꾸고 싶을 때 언제든지 함수를 호출하면 된다.
지적 및 개선사항은 언제든지 댓글로 부탁드립니다!
'공부 > C' 카테고리의 다른 글
C - 문자열(1) (0) | 2020.05.18 |
---|---|
C - 문자 (0) | 2020.05.18 |
C - 배열 (0) | 2020.05.14 |
C - 함수 (0) | 2020.05.12 |
C - 반복문(while, for, do ~ while) (0) | 2020.05.12 |