Layer7
포인터 보고서
cg10036
2019. 4. 7. 00:47
/*
&num -> num의 주소값
* -> 역참조 연산자
*/
1. 포인터란?
어떠한 값의 주소값이다.
#include <stdio.h>
int main()
{
int num = 1;
int *pnum = #
printf("%d", *pnum);
}
#include <stdio.h>
int main()
{
int num = 1;
printf("%d", *&num);
}
위와 아래의 결과가 같게 나온다.
2. 포인터 선언방법
포인터는 2가지 방법으로 선언 가능하다.
int *num;
int* num;
차이점은 없다.
3. 다중포인터
포인터를 다중으로 사용하는것이다. 다중으로 갈수록 *이 붙는다.
2중포인터 : **ppnum -> *pnum -> num
5중포인터 : *****pppppnum -> ****ppppnum -> ***pppnum -> **ppnum -> *pnum -> num
#include <stdio.h>
int main()
{
int num = 1;
int *pnum = #
int **ppnum = &pnum;
int ***pppnum = &ppnum;
int ****ppppnum = &pppnum;
int *****pppppnum = &ppppnum;
printf("%d", *****pppppnum);
}
4. 포인터를 쓰는 이유
직접적으로 메모리에 접근이 가능하다. 이는 c언어가 가지고 있는 가장 큰 장점이다.
5. call by value, call by reference
#include <stdio.h>
void run(int i)
{
i = 1;
}
int main()
{
int i = 0;
run(i);
printf("%d", i);
}
//Call By Value, i = 1
#include <stdio.h>
void run(int *i)
{
*i = 1;
}
int main()
{
int i = 0;
run(&i);
printf("%d", i);
}
//Call By Reference, i = 0
call by value는 다음과 같다. (<> -> 메모리이다)
<(MAIN) [i]> <(RUN) [i]>
<(RUN) [i]>에 0 대입 -> 실제 i에서는 바뀌지 않음
call by reference는 다음과 같다. (<> -> 메모리이다)
<(MAIN) [i]> <(RUN) [*i <- (MAIN) [i]]>
(RUN) [*i]에 0 대입 -> (RUN) [*i] = (MAIN) [i] -> (MAIN) [i]에 0 대입 -> 실제 i에서 값이 바뀜