프로그래밍 언어/C언어

<C++> pointer (포인터 변수, 주소 변수) 1

창조적생각 2021. 7. 19. 12:32

포인터는 함수를 사용하기 위해 사용합니다.

예문을 한번 봅시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
 
void call(int c)
{
    c++;
}
int main(){
    int a = 7, b = 5;
    
    printf("before : %d\n", a); //7
    call(a);  //call by value
    printf("after : %d\n", a);
}
 
cs

call 함수는 ()안에 정수 c를 1씩 더하는 함수입니다.

하지만 함수 call(a)를 해도 a의 값은 변하지 않습니다.

[실행결과]

 

 

그 이유는 

1
2
3
4
5
void call(int c)
{
    c++;
}
 
cs

 

call 함수에서 int c는 지역변수기 때문에 a값을 넣고 연산한다 하더라도 연산이 끝나면 지역변수로써 쓰임을 다하고 사라지기 때문입니다.

그렇기에 a 변수를 그대로 가져오기 위해 c를 a 변수의 주소를 받는 주소변수 즉, Pointer변수로 사용하여 a 값을 바꾸는 함수가 되도록 바꾸는 것이 필요합니다.

 

Pointer 변수의 모습*i , *p, *a 등 앞에 *을 붙여준 모습입니다.

그렇다면 바로 코드를 바꿔보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void call(int*c)
{
    //(1)c++;
    *= *+ 1
}
    
     
}
int main(){
    int a = 7, b = 5;
    
    printf("before : %d\n", a); 
   call(/*(2)a*/&a);  
     
    printf("after  : %d\n", a);
}
 
cs

이렇게 call 함수 안에 c를 Point 변수인 *c로 변경하고,

아래에 메인에 call 함수 ()안에 a에는 a가 받는다는 것을 나타내기 위해 &a를 넣어줍니다.

 

이렇게 하면

[실행결과]

이렇게 1이 더해져서 나오게 됩니다.

몇 번 더 call 함수를 더해주면

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
 
void call(int *c)
{
    //c++;
    *= *+ 1
}
 
int main(){
    int a = 7, b = 5;
    
    printf("before : %d %d\n", a, b); 
    call(&a);
    call(&a);
    call(&a);
    printf("after  : %d %d\n", a, b);
}
 
cs

실행결과 a = 10이 됩니다.

 

 

728x90