제 16장 포인터의 이해 - 1
※ 프로그램은 눈과 손이 아닌....그림과 말로 이해하는 습관으로!
● 포인터와 포인터 변수
- 포인터는 변수이다(포인터 변수) : 상수가 될수 있긴함
- 메모리의 주소값을 저장하기 위한 변수 ==> 포인터를 한다
- 주소값과 포인터는 다른 의미임
- 메모리구조를 항상 생각하면서 프로그램 하는 습관을 기르자!
◆ 메모리구조(포인터)
#include <stdio.h>
{
char c = 'a';
int n = 7;
double d = 3.14;
....
↓↓↓

변수 c의 주소는 뭘까요? => 0x1000
변수 n의 주소는 뭘까요? => 0x1001
변수 d의 주소는 뭘까요? => 0x1005
☞ 변수의 주소는 주소의 시작번지로 표현된다.
참고 > 당신의 컴퓨터는 몇 bit 시스템인가요?
-> bit수가 클수록 시스템의 성능은 좋아진다.
-> 결정적인 bit가 정해지는 이유??
@ 즉, 8bit 시스템은 메모리의 주소값이 8자리로 표현된다.
ex) 0001 0001, 0010 0001
32비트면 32자리로 표현된다.(2의 32승, 즉 4G 까지 메모리 사용가능)
그러므로 주소번지개수를 많이 만들수 있다
8 비트 시스템은 포인터의 크기는 1바이트
16비트 시스템은 포인터의 크기는 2바이트
32비트, 64비트 시스템은 포인터가 최하 4바이트가 된다.(32bit = 4byte)
pn이라는 n의 값을 가르킨다.

● 포인터의 타입과 선언
- * : 포인터 선언시사용되는 연산자
- P형 포인터(P*) : P형(data type) 변수의 주소값을 지정
> int 형 포인터 : int * p ; // int형 변수를 가리키는 포인터
> double 형 포인터 : double * lp; // double형 변수를 가리키는 포인터
> char 형 포인터 : char * ch; // char형 변수를 가리키는 포인터
ex) int* a;
int * a;
int *a; // 이 3가지 다 똑같다.
● 주소관련 연산자
- & 연산자 : 변수의 주소 값 반환(번지 연산자 / 주소연산자)
- * 연산자 : 포인터가 가리키는 메모리 참조
예제)=============================================================
#include <stdio.h>
int main()
{
int a = 200;
int *pA = &a; // &a : a라는 변수의 주소값을 반환하라
// a의 주소값을 pA에 저장하라
// pA의 포인터는 a를 가리킨다
printf("%d \n", a); // 직접접근
printf("%d \n", *pA); // 간접접근
// pA자체만 출력한다면, a의 주소값을 출력할거다
// *pA : pA 변수가 가르키는 변수를 뜻함, 즉 a
return 0;
}
예제)=============================================================
#include <stdio.h>
int main()
{
int a = 100;
int *pA = &a;
printf("pA : %d \n", pA);
printf("&a : %d \n", &a);
(*pA)++; // pA가 가리키는 변수 a의 값을 1 증가시킨다.
printf("a : %d \n", a);
printf("*pA : %d \n", *pA);
return 0;
}
================================================================
※(참고) * 용도
1. 곱셈용도
2. 포인터 선언 (int *p : p라는 int형 포인터 선언)
3. 포인터를 접근 (*p : p라는 포인터가 가르키는 변수의 값)
'프로그래밍 > C' 카테고리의 다른 글
제 18장 포인터의 이해 - 2 (0) | 2010.07.10 |
---|---|
제 17장 포인터의 이해 - 예제 (0) | 2010.07.10 |
제 15장 1차원 배열 - 2 (0) | 2010.07.10 |
제 14장 1차원 배열 - 1 (0) | 2010.07.10 |
제 13장 C언어의 핵심 함수 - 3 (0) | 2010.07.10 |