Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 명시적형변환
- implicit Conversion
- oveflow
- 암시적형변환
- 리액트네이티브
- GetKey
- File
- OnMouseClick
- 마우스
- 오버플로우
- 구독
- 훅
- stopcoroutine
- Subscribe
- 코루틴
- 키보드
- Explicit Conversion
- Fetch
- 저장
- 불러오기
- C#
- 중단
- Unity
- JSON
- 유니티
- 리액트
- 팁
- >.NET
- 클래스
- useEffect
Archives
- Today
- Total
Log to grow
[C] 포인터의 기초, 간단 정리 본문
1. 포인터란?
1) 정의 : 변수의 주소값을 담는 변수
- 왜 포인터일까? 변수의 주소값을 담는다는 것은 변수가 위치를 가리키는 것이므로!
2) 변수의 주소값?
- 변수는 메모리 공간 어딘가에 저장이 되고 주소가 할당된다.
- 변수의 주소는 '&' 연산자를 통해 접근한다!
int num = 1;
printf("%d\n", num); // 1
printf("%#x\n", &num); // 0xed847898 --> num 변수의 주소값
** #x 는 0x........ 의 형태로 주소값을 출력하기 위한 용도 (16진수)
2. 포인터의 선언
// 자료형 *변수_이름
int *num_pointer
- 변수 이름 앞에 *(asterisk)를 붙임으로써 포인터 변수임을 표시한다!
- 변수 이름 앞에 붙이긴 하지만 자료형과 묶어 하나의 자료형이라고 생각하면 이해가 쉽다.
- ex) int * : 정수형 포인터의 자료형!
3. * 의 사용
- 역참조(dereference) 연산자
- 역참조의 말 뜻 그대로 포인터 변수에 담겨있는 주소값에 해당하는 변수를 의미!
- 쉽게 얘기해서 포인터가 가리키고 있는 변수의 값!
int num = 1;
int *num_ptr = #
printf("%#x\n", num_ptr); // 0xed847898 --> num 변수의 주소값
printf("%#x\n", *num_ptr); // 1 --> num 변수의 값
- 결과적으로, 포인터 변수를 선언할 때의 '*'와 포인터 변수를 사용할 때의 '*'의 의미를 구분하는게 편하다.
int num = 1;
int *num_ptr = # // -> 'int *'를 하나의 자료형으로 생각
*num_ptr = num; // -> 포인터 변수 앞에 *는 역참조!
4. 함수의 인자로써의 포인터
int main(){
int num = 1;
func(&num);
return 0;
}
void func(int *num_ptr){
printf("%d\n", *num_ptr);
}
- 함수의 parameter는 포인터 변수로 선언 (int *num_ptr)
- 전달되는 argument는 parameter의 담길 값이므로 변수의 주소값 (&num)
- 이해가 어렵다면 아래 예제와 비교해보면 쉽다. parameter는 변수, argument는 값!
int main(){
func(1);
return 0;
}
void func(int num){
printf("%d\n", num);
}
5. NULL 포인터
- 포인터의 값을 NULL로 지정할 수 있으며 이를 NULL 포인터라고 부른다.
int *num_ptr = NULL;
printf("%#x\n", num_ptr); // 0 -> NULL 포인터에 담긴 값은 0
'PL > C' 카테고리의 다른 글
[C] Recursive Problem (0) | 2018.05.17 |
---|
Comments