일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬강의
- 머신러닝 강좌
- 백준 알고리즘
- 머신러닝공부
- c언어 오목
- supervised learning
- 인공지능
- 머신러닝
- 딥러닝
- feature scaling
- python강좌
- 딥러닝공부
- 효묘블로그
- 머신러닝 강의
- 비지도학습
- 비용함수
- Python강의
- 경사하강법
- 파이썬강좌
- 자바
- JAVA강좌
- 자바강좌
- 자바시작하기
- java
- 지도학습
- acmicpc.net
- unsupervised learning
- 선형회귀
- C언어
- Gradient Descent
- Today
- Total
컴공과컴맹효묘의블로그
C언어 포인터 개념 쉬운 설명 본문
안녕하세요. 이번 포스팅은 C언어의 포인터개념에대한 설명입니다. 많은 사람들이 어려워하셔서 최대한 쉬운 방법으로 설명해드리겠습니다.
일단 사전지식으로는 변수의 개념을 알아야합니다.
포인터 변수
우리는 일반적으로 다음과 같은 변수를 선언해왔습니다.
int age = 20;
double height = 175.3;
위 코드는 int형과 double형이 쓰였습니다.
이번엔 조금 특이한 변수를 알려드리겠습니다.
바로 (int*)형입니다.
int *pa;//int* pa;
char *pc;//int* pc;
똑같은 변수같은데 이 변수에는 앞에 별*이 붙었습니다.
이 코드가 바로 포인터 변수를 선언하는 코드입니다.
바로 변수의 "주소"를 저장할 수 있는 변수입니다.
그렇다면 주소가 무엇일까요?
int year = 2019;
printf("year : %d\n", year);
printf("&year : %x", &year);
>> year : 2019
&year : 0x00ff14;
생소해 보이지만, scanf에서 많이 보셨을겁니다.
여기서 &는 변수의 "주소"를 표현하는 연산자입니다.
여기서 "주소"란, 말 그대로 변수가 살고있는 주소입니다.
우리세계의 주소는 A동 B아파트 103호 라고 표현하지만, 컴퓨터의 세계의 주소는 위와같이 0x00ff14로 표현됩니다.
이제 주소라는 개념을 이해하셨다고 생각하고 주소를 저장하는 포인터 변수에 대해 설명하겠습니다.
int a = 31;
int* pa = NULL;//포인터 변수 초기화 (pa에는 어떠한 주소도 저장되어있지 않는다.)
pa = &a;
a의 주소가 0x00ff00이라고 가정합니다.
2행에서는 (int*)이라는 자료형으로 포인터 변수 pa를 선언하고있습니다.
4행에서, pa는 포인터 변수니까 a의 주소 즉, &a==0x00ff00값을 저장합니다.
이제 pa를 출력하면 0x00ff00이라는 값이 나옵니다.
이제 pa라는 상자 안에는 0x00ff00이라는 생소한 값이 들어있습니다. 하지만 우리는 이 주소가 변수 a가 살고있는 주소와 같다는 것을 알고있습니다.
여기서 우리는 pa는 a의 주소를 알고있으니, 포인터 변수 pa를 이용하여 a가 가지고있는 값을 알아낼 수 있습니다.
printf("%d",*pa);
>>31
바로 *pa를 출력하면 a가 가지고 있는 값 31이 나옵니다. 여기서 *의 의미는 포인터 변수의 값을 "참조" 하겠다는 의미입니다.
그렇다면 "참조"란, 특정 "주소"에 저장되어있는 값을 출력하겠다는 의미입니다.
즉, *을 이용하여 pa==0x00ff00을 "참조"했으니, 0x00ff00에 저장되어있는 31을 출력하겠다는 의미입니다.
다시말해서, 변수 a와, *pa는 정확히 같습니다. 둘 다 똑같은 주소에 저장되어있는 값을 출력하는 변수기 때문입니다.
마지막으로 짧게 정리해드리겠습니다
&은 "주소"를 출력한다.
*는 "주소"에 있는 "값을 출력한다. 즉, a==*&a 서로 같은 의미인 것을 알 수 있다.
이로써 이번 포스팅을 마치겠습니다. 잘 이해가지 않는 것이 있으면 댓글에 써주시면 최대한 쉽고 친절히 알려드리겠습니다.
'컴퓨터 > C언어' 카테고리의 다른 글
C++ Linked List로 Stack 구현해보기(그림설명) (0) | 2020.04.23 |
---|---|
C언어로 할만한 간단한 (게임)프로젝트 추천(초보자) (1) | 2020.02.16 |
c언어로 게임을, c언어 좌표계 gotoxy()함수 (0) | 2019.10.01 |
C언어 포인터와 배열에 대한 쉬운 설명 (0) | 2019.08.17 |
C언어 실행 시간 측정하는 clock함수 (0) | 2019.08.15 |