참고 문서 |
---|
포인터 변수란?
- 다른 객체의 메모리 주소를 저장하는 변수.
- 선언되는 자료형(data type) 단위로 증가되거나 감소될 수 있다.
"포인터 변수는 어떤 객체가 할당 받은 메모리의 선두주소를 포인터 변수가대입 받아 이를 활용할 수 있게 한다."
선언 형식
자료형 *변수이름;
자료형 *변수이름1, *변수이름2, ... , *변수이름n;
선언 예
int *ip; char *cp; float *fp; double *dp;
포인터 변수는 32-bit 운영체제는 4-byte, 64-bit 운영체제는 8-byte 크기를 할당.
& (주소 연산자) : 변수에 할당된 메모리의 시작주소를 의미하는 연산자
* (포인터 연산자) : 포인터 변수가 가리키는 곳의 내용을 참조하는 연산자
#include <stdio.h> int main(void) { int num=98; double d , *dp; /* 포인터 변수 dp 선언 */ printf("%d, %c, %p \n",num,num,&num); d=10.3; dp=&d; /* 포인터 변수에 &연산자를 이용하여 주소를 할당 받음 */ printf("value : %lf, address : %p \n", d, &d); printf("value : %lf, address : %p, %p \n", *dp, dp, &dp); printf("sizeof : %d %d \n",sizeof(d),sizeof(dp)); /* 포인터 변수는 타입에 관계없이 4-byte를 할당 */ return 0; }
포인터 변수의 자료형
- 포인터 변수 선언 시 주의할 점은 포인터 변수의 자료형이다.
- 포인터 변수의 자료형은 포인터 변수가 가리키는 번지로 가서 몇 byte 단위로 데이터를 읽어 오게
하는 가에 대한 정보를 나타낸다.
- 포인터 변수의 자료형(data type)은 포인터 변수가 접근하는 데이터의 자료형과 같아야 한다.
변수와 포인터 변수의 차이점
변수 | 포인터 변수 | |
---|---|---|
선언 | double d; | double *dp; |
메모리 할당 | 8 | 4 (32-bit 운영체제) |
저장 | 실수형 데이터 | 메모리 주소 |
값 접근 | d (변수명 사용) | *dp (저장된 주소를 참조) |
값의 접근방식 | 직접 접근 | 간접 접근 |
포인터 변수를 사용할 때 알아야 할 5가지 규칙
- 포인터 변수는 *변수명으로 선언하여 컴파일러에게 포인터 변수임을 알린다.
- 포인터 변수의 자료형은 자신에게 주소를 대입할 변수의 자료형과 같아야 한다.
- 포인터 변수는 선언만으로는 주소를 할당 받지 못하므로 다시 변수의 주소를 할당 받아야 한다. (일반적으로 변수의 주소를 지정하는 데는 "&" 연산자를 사용한다.)
- 실행문에서의 *변수명은 자신이 보관하고 있는 주소의 데이터(값)에 접근하게 된다.
포인터 변수는 값을 저장하는 것이 아니라, 값이 저장된 어떤 객체의 선두주소를 가지므로 * 연산자를 통하여 값에 대한 접근을 하게 된다. 이것을 간접 접근이라고 한다. - (5) 모든 포인터 변수는 자료형과 무관하게 4-byte의 크기를 할당을 보장 받는다.
#include <stdio.h> int main(void) { char ch,*cp; int num,*ip; float fnum,*fp; double dnum,*dp; ch='A'; num=90; fnum=0.123; dnum=0.123456; cp=&ch; ip= # fp= &fnum; dp=&dnum; printf("%p %p %p %p\n",&ch, &num, &fnum, &dnum); printf("%p %p %p %p\n",&cp, &ip, &fp, &dp); printf("%5c %5d %10f% 10lf \n",ch, num, fnum, dnum); printf("%5c %5d %10f% 10lf \n",*cp, *ip, *fp, *dp); printf("%3d %3d %3d %3d \n",sizeof(ch), sizeof(num), sizeof(fnum), sizeof(dnum)); printf("%3d %3d %3d %3d \n",sizeof(cp), sizeof(ip), sizeof(fp), sizeof(dp)); return 0; }
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
43 | 구조체 포인터 | 2014.06.15 | 931 |
42 | 구조체의 선언과 데이터 입·출력 | 2014.06.15 | 3084 |
41 | 함수 포인터 | 2014.06.15 | 447 |
40 | 배열과 포인터 | 2014.06.15 | 406 |
39 | 포인터 연산 | 2014.06.15 | 384 |
» | 포인터 변수 | 2014.06.15 | 414 |
37 | 데이터 정렬 | 2014.06.15 | 424 |
36 | 배열 초기화 | 2014.06.14 | 630 |
35 | 2차원 배열 | 2014.06.14 | 670 |
34 | 문자열 처리 함수 | 2014.06.14 | 412 |
33 | 문자열 입출력 함수 | 2014.06.14 | 442 |
32 | 접근 수정자 | 2014.06.14 | 824 |
31 | 전역 변수 | 2014.06.14 | 308 |
30 | 지역 변수(local variable) | 2014.06.14 | 295 |
29 | 변수와 메모리 저장 위치 | 2014.06.14 | 428 |
28 | 비트 연산자 | 2014.06.14 | 288 |
27 | 관계 연산자와 논리 연산자 | 2014.06.14 | 472 |
26 | 증감 연산자 | 2014.06.14 | 319 |
25 | printf() 함수의 형식 지정자 | 2014.06.14 | 7522 |
24 | 열거 형 변수의 이해 | 2014.06.14 | 465 |