일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- php
- 보안뉴스 요약
- Oracle SQL
- 자바스크립트 API
- 깃허브
- 자바스크립트 객체
- 랜섬웨어
- 자바스크립트 element api
- 자바스크립트 prototype
- 카카오프로젝트100
- javascript
- 오라클
- python
- 보안뉴스한줄요약
- 자바스크립트 node
- 보안뉴스
- 자바스크립트 jQuery
- numpy
- GIT
- 보안뉴스요약
- ES6
- 파이썬
- 카카오프로젝트 100
- 보안뉴스 한줄요약
- 자바스크립트
- 다크웹
- 자바스크립트 기본 문법
- oracle
- 카카오프로젝트
- oracle db
- Today
- Total
FU11M00N
C언어 포인터 기본 본문
잠깐 전 포스팅에서 봤었던 자료형들의 크기를 다시 생각해 보고,
아래의 변수들의 크기는 얼마나 나올까요?
#include <stdio.h>
int main(){
//아래의 변수들은 몇바이트일까요?
int a;
char b;
double c;
char d[10];
char e[10][5];
return 0;
}
#include <stdio.h>
int main(){
int a; // 4byte
char b; // 1byte
double c;// 8byte
char d[10]; // 10 byte
char e[10][5]; // 50byte
return 0;
}
int와 char double의 바이트 크기는 다들 알고 계셨겠지만,
배열 d와 배열 e의 크기가 헷갈리는 부분이 있습니다.
char d [10]은 char 1byte가 10개 모인 배열이고
char e [10][5]는 char 5byte짜리 배열이 10개가 모여서 50byte가 되는 거예요.
그럼 본격적으로 포인터에 대해 알아보겠습니다. 포인터로 뭘 할 수 있는데?라고 다들 궁금해하실 거예요.
포인터는 메모리 주소를 저장하고, 특정 자료형으로 그 주소에 접근하기 위한 자료형입니다.
포인터 변수에는 메모리의 주소를 담을 수 있는 크기와 그 주소에 접근하기 위한 자료형이 필요합니다.
그림으로 표현하면 아래와 같습니다
변수 a에는 정수 20 이란 값이 들어가 있고 a의 주소를 500번지라고 가정해 보면,
변수 a는 주소 연산자 &를 이용하여 a의 첫 주소를 포인터 변수 p에게 줬어요.
그럼 포인터 변수 p는 주소 500번지라는 값을 가지게 되고, p는 a의 첫 주소를 가리키고 있는 모습이 돼요.
아까 위에서 말했듯 포인터는 메모리 주소를 저장하고,
특정 자료형으로 그 주소를 접근한다는 게 위의 그림으로 설명이 돼요.
그럼 포인터 변수 p의 주소는 없을까요?
p도 변수이기 때문에 &p의 값은 주소 1000번지라고 가정하고 주소 1000번지라는 값이 나오게 돼요.
그럼 코드로 값을 확인해 볼까요?
#include <stdio.h>
int main(){
int a= 20;
int* p= &a;
printf(" a의 값: %d\n a의 주소:%p\n",a,&a);
printf(" p의 값:%p\n p가 가르키고있는 값:%d\n p의주소: %p\n",p,*p,&p);
return 0;
}
a의 값은 20이고
a의 주소는 00614 FE9 C p의 값은 0061 FE9C으로 값이 같죠?
p가 가리키고 있는 값 20
p의 주소 0061 FE98
다들 이해가 시나요? 그럼 int a가 메모리에서 차지하는 자료형의 크기와 int p가 메모리에서 차지하는 자료형의 크기를 확인해 볼까요?
sizeof로 크기를 확인할 수 있어요.
#include <stdio.h>
int main(){
int a= 20;
int* p= &a;
printf(" a의 값: %d\n a의 주소:%p\n",a,&a);
printf(" p의 값:%p\n p가 가르키고있는 값:%d\n p의주소: %p\n",p,*p,&p);
printf("a의 크기: %d byte\n",sizeof(a));
printf("p의 크기: %d byte",sizeof(p));
return 0;
}
int a의 크기는 우리가 알듯이 4byte이고 int* p의 크기는 8byte이네요?
포인터 변수의 크기는 int이든 double이든 char이든 모두 4 혹은 8 byte에요.
왜 4 혹은 8바이트일까요? 이건 32bit 운영체제이냐 64비트 운영체제 일 때마다 달라져요.
32bit 컴파일을 실행하게 되면 4byte
64bit 컴파일을 실행하게 되면 8byte가 출력될 거예요.
다들 포인터의 기초적인 내용 이해하셨나요?
그럼 다음엔 배열과 연관 지어 오겠습니다!
'Programming > C Language' 카테고리의 다른 글
[C언어] C언어 <stdint.h> 헤더파일 (0) | 2020.04.18 |
---|---|
C언어 함수포인터 (0) | 2020.04.14 |
C언어 포인터 와 배열 이해와 차이점 (0) | 2020.04.14 |
C언어 스택의 기본개념과 재귀함수의 개념 (0) | 2020.04.13 |
C언어 자료형과 메모리의 기본적인 이해 (0) | 2020.04.03 |