반응형
포인터는 변수의 이름에 직접 접근할 수 없을 때 사용한다.
#include<stdio.h>
int test(int *x, int y);
int main(){
int x = 10; // 지역변수
int y = 10;
test(&x, y);
printf("x = %d\n", x); // test() 함수에 주소값을 보냈기 때문에 x의 값은 변하게 된다.
printf("y = %d\n", y);
return 0;
}
int test(int *x, int y){ // int *x == &x
*x = 20; // 역참조연산자: 지역이 다른 곳에 있는 변수 값을 제어한다.
// 해당 변수의 주소를 추적하여 실제 값을 변경한다.
y = 20;
}
포인터 사용 시 주의할 점
1. 포인터는 초기화하고 사용하는 것이 안전하다. (실행 에러가 발생할 수 있다.)
ex) 초기화하지 않았을 때
int *p;
*p = 10; // (오류) 포인터 p가 가리킬 주소를 지정하지 않고 값만 주었다.
2. 어떤 변수를 가리킬지 알 수 없을 때 사용한다.
3. 포인터 변수가 할당되었는지를 검사한다.
4. 포인터의 데이터형과 포인터가 가리키는 변수의 데이터형은 같아야 한다.
5. 포인터 연산에서 +/-, ++/-- 등은 주소의 증감을 나타낸다.
#include<stdio.h>
int main(){
int *p = (int*)0x100; // 포인터 연산을 확인하기 위해 절대 주소를 대입한다.
double *q = (double*)0x100;
char *w = (char*)0x100;
printf("int* : %p, %p, %p\n", p, p + 1, p + 2);
printf("double* : %p, %p, %p\n", q, q + 1, q + 2);\
printf("char* : %p, %p, %p\n", w, w + 1, w + 2);
return 0;
}
주소는 16진수로 표시하기 때문에 'q+2'는 '00000110'으로 출력된다.
반응형
'C' 카테고리의 다른 글
[C언어] 실습: 함수를 이용하여 정수 두 개의 합과 곱을 계산하여 출력하는 프로그램 구현하기 (0) | 2021.04.14 |
---|---|
[C언어] 실습: 함수를 호출하여 입력받은 숫자 세 개를 큰 순서대로 나열하기 (0) | 2021.04.13 |
[C언어] 역참조연산자(간접연산자, *) (0) | 2021.04.07 |
[C언어] 포인터의 초기화 (0) | 2021.04.06 |
[C언어] 포인터의 크기 (0) | 2021.04.06 |