본문 바로가기
Programming/C&C++

[C/C++] Pointers

Pointers




C언어의 자료형은 기본 자료형참조 자료형으로 나뉜다.

기본 자료형은 프로그램 상에서 실제로 사용 할 값을 의미한다.

참조 자료형은 프로그램 상에서 실제로 사용 할 값이 저장되어 있는 기억공간의 주소값을 의미한다.


기본자료형 변수를 일반 변수를 일반 변수, 참조자료형 변수를 포인터 변수라고 부른다.


포인터 변수에 담을 기억공간의 주소값은 &연산자로 알아올 수 있다

포인터 변수는 *를 붙혀서 선언한다.


1
2
3
4
5
6
7
8
9
10
int main(int argc, char const *argv[])
{
    int a = 100//일반 변수
    int *b; //포인터 변수 , Integer 타입의 주소값이다.
    *= &a; //a의 주소값이 대입
 
    printf("a : %d\n", a); //100
    printf("b : %d\n", b); //6487620
    return 0;
}
cs


포인터 변수를 사용할 때 *연산자를 사용하면 포인터 변수에 들어있는 주소값을 가져오고 주소값을 통해 기억장소에 접근하여 해당 변수를 사용할 수 있다.


다시 정리하면 현재 a라는 공간에 100이라는 값이 들어있고, b에는 a공간의 주소값이 들어있다.

포인터 연산자를 붙혀(*b) 그 주소값을 통하여 접근 기억장소의 값을 알아 낼 수 있다.



1
2
3
    printf("a : %d\n", a); //100
    printf("b : %d\n", b); //6487620
    printf("b : %d\n"*b); //100
cs


a와 *b의 값이 같다.




1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, char const *argv[])
{
    int a = 100
    int *b;  
    int c = a;
 
    c = 1000;
    printf("a : %d\n" ,a); //100
    printf("c : %d\n" ,c); //1000
 
    return 0;
}
cs


변수 c에 a의 값을 대입하고, 다시 Line7에서 1000을 c에 대입 하였다.

출력 결과는 100과 1000으로 나온다.


1
2
3
4
5
6
7
8
9
10
11
int main(int argc, char const *argv[])
{
    int a = 100
    int *b;  
 
    *= 2000;
    printf("a : %d\n" ,a); //2000
    printf("b : %d\n" ,*b); //2000
    
    return 0;
}
cs


a에는 100대입 되어있고, b에는 a의 주소값이 들어가있다.

Line6에서 b에 대입되어있는 a의 주소값을 통하여 a에 접근하여 값을 2000으로 바꾸었다.

그렇기 때문에 변수 a의 값 또한 2000으로 바뀌게 되었다.




NULL


포인터 변수를 서언하고 기억공간의 주소값을 넣지 않을때는 NULL값을 넣어준다.

포인터 변수 선언 후 주소값을 넣지 않으면 예상하지 못한 값이 들어 있을 수도 있기 때문이다.


NULL은 의마가 없는 값을 의미

기본 자료형에서는 void, 참조 자료형에서는 NULL을 사용한다.


0과 NULL의 차이점은 사진 1장으로 대체한다.



'Programming > C&C++' 카테고리의 다른 글

[C++] TEMPLATE  (6) 2018.04.15
[C++] STACK / QUEUE  (3) 2018.04.15
[C++] 클래스 상속 관계  (0) 2018.04.15
[C++] POINTER ARRAY  (0) 2018.04.15
[C++] DYNAMIC MEMORY  (1) 2018.04.15