안녕하세요. 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입니다
'프로그래밍 언어 > C언어' 카테고리의 다른 글
call by value vs call by reference (0) | 2020.07.07 |
---|---|
C언어 2차원 배열이란 (0) | 2020.07.06 |
C언어 배열의 변수명에 &를 붙이면? (0) | 2020.05.14 |
C언어 특정비트 1로 만들기 (0) | 2020.02.25 |
함수 선언할 때 매개변수에 *넣는거와 안넣는거 차이점. (0) | 2020.01.06 |