프로그래밍 언어/C언어

C언어 포인터에 관해서

원원 2020. 6. 13. 21:16

안녕하세요. C언어 포인터에 관해서

 

 

1) 포인터란? 

포인터는 번지에 대한 기호화된 표현을 말합니다. ( 포인터 = 번지 )

 

예를들어 int형 변수를 하나 선언하면 아래의 그림처럼 메모리가 할당됩니다

int won;

시스템이 할당한 4바이트는 다른 프로세스들이 할당 받지 못하므로, 안전하게 사용할 수 있습니다

4바이트 모두 이름을 가지고 있고 번지라고 합니다.

 

 

2) 포인터 변수란?  

포인터는 메모리의 특정 위치를 가리키는 것을 말하고, 포인터 변수는 포인터를 저장할 수 있는 변수를 말합니다.

포인터 변수에는 상수 값이나 문자가 들어가지 못하고 번지만 들어갈 수 있습니다.

 

3) *,& 연산자란?

포인터 변수를 선언할때는 변수명앞에 *(asterisk)를 붙이고, 포인터변수의 번지수에있는 값을 참조할 때 *를 붙입니다.

변수의 주소를 표현할때는 변수명앞에 &(ampersand)를 붙입니다.

 

 

4)포인터 변수의 정의

포인터 변수를 정의해보겠습니다. 정의할때는 변수명 앞에 별표를 붙이면 됩니다

int *pwon;

2번에서 포인터 변수에는 상수나 문자값이 들어갈 수 없다고 했습니다

따라서 pwon = 1; pwon = 'A';같은건 할 수 없습니다

pwon변수가 메모리상에 할당된 모습입니다.

pwon변수를 선언만하고, 할당만 했을 때 pwon , &pwon을 출력해보면, pwon은 선언만하고 안에 번지수를 안넣었으니 쓰레기값이 출력될 것이고, &pwon은 0x000F가 출력될 것 입니다.

 

 

 

3) 포인터 변수에 번지할당

실제로 포인터를 사용 해 보겠습니다

 

예제1)

 

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h> 
 
int main(void
    int won;
    int *pwon; //포인터 변수인것을 표현하기위해서 변수명앞에 p를 붙여줬습니다.
    pwon = &won; 
    
    printf("won의 주소값 : %d \n",&won);
    printf("pwon안에 들어있는 값 : %d",pwon);
}

출력값

0x000F

0x000F

7번째 줄에서 pwon의 변수에 won의 번지값을 넣었습니다.

9번째줄에서 won의 주소값은 0x000F 입니다.

10번째줄에서 pwon에 들어가있는 값은 0x000F입니다.

(&won == pwon) 을 확인 할 수 있었습니다.

 

 

 

 

 

 

예제2)

 

1
2
3
4
5
6
7
8
9
10
11
 
int main(void
    int won;
    int *pwon;
    won = 100;
    pwon = &won; 
    
    printf("won : %d \n",won);
    printf("*pwon : %d",*pwon);
}

이번에는 won변수에 값을 넣어서, 출력하는 모습입니다.

 

 

 

9번째줄을 출력하면 100이 나옵니다

10번째줄을 출력하면 100이 나옵니다

*pwon은 저장된 번지수에 있는 값을 얻을 수 있게 해줍니다.

 

 

다른 예로 &*pwon을 출력하면 어떻게 될까요?

pwon은 0x000F입니다

*pwon은 100입니다

&*pwon은 100의 주소입니다 0x000F

 

*&*pwon을 출력하면?

pwon은 0x000F입니다

*pwon은 100입니다

&*pwon은 100의 주소입니다 0x000F

*&*pwon은 100입니다