728x90
포인터는 함수를 사용하기 위해 사용합니다.
예문을 한번 봅시다.
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++;
*c = *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++;
*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
'프로그래밍 언어 > C언어' 카테고리의 다른 글
<C> 2차원 배열 연습 rand(), srand(),2차원 배열 출력,등수 (0) | 2021.07.05 |
---|---|
<c> 로또 번호 생성기 (0) | 2021.06.28 |
<C> FOR문 연습 1 (0) | 2021.06.28 |