포인터에 대한 보고서
1.포인터의 개념
포인터라는 개념을 이해하기위해서는 먼저 가장 핵심인
메모리라는 걸 이해해야합니다. 메모리는 바이트(Byte)로
쪼개 지며 그 바이트 마다 주소 값을 가지고 있는데,
여기서 포인터는 그 메모리의 주소를 가진 변수라고
말할수 있습니다. (한마디로 수를 저장한다고 표현하기
보다는 그 수가 가지고 있는 주소 값을 표현한다고 보면
됩니다.(물론 문자도 포함))
*위는 제 생각이었고, 밑은 사전에 정의된 말입니다
포인터(pointer)는 프로그래밍 언어에서 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 포인터가 가리키는 값을 가져오는 것을 역참조(逆參照, dereferencing)라고 한다.출저:위키백과
2.포인터의 변수 선언방법
포인터의 변수 선언 방법은 굉장히 간단하다.
그냥 일반 변수 선언 하는것처럼 하고,
그앞에 *를 붙혀주면된다.
int *po
*뒤에 공백을 넣어도 된다.
int * po
3.포인터의 초기화
포인터를 초기화 시킬때에는
scanf와 마찬가지로 주소값을 저장 해야 하기때문에
변수앞에 &를 써서 초기화를 시켜준다.
(& 연산자는 오른쪽에 등장하는 피연산자의 값을 반환하는 연산자이다.)
또한 &연산자의 피연산자는 변수여야 한다
ex)pum = &a;
또한 int *pointer = NULL;
이렇게도 나타낼수 있는데 int *pointer=0; 과같은 의미이다.
*의 역할을 알수있는 예제를 작성해보자
1 2 3 4 5 6 7 | #include<stdio.h> int main() { int a = 10; printf("%d\n", &a); return 0; } | cs |
이렇게 하면 a의 주소값을 10진 정수로 나타낸다.
이렇게 말이다. 하지만 *를 붙힌다면
1 2 3 4 5 6 7 | #include<stdio.h> int main() { int a = 10; printf("%d\n", *&a); return 0; } |
이렇게 *이 주소로 가서 정수 값을 가지고 와서 10을 출력한다.
4.포인터가 필요한이유
1.먼저 원래값을 직접 변경 하려고 할때 굉장히
유용하다(쓸때 없는 선언들을 줄이기 때문)
한마디로 = 효율적이다.
위에 것이 가장큰 이유이다
2. 값에 접근할때 유용하다
5.포인터에 대한 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include<stdio.h> int main() { int go1 = 30, go2 = 30; int *num1 = &go1; int *num2 = &go2; int * temp; (*num1) += 20; (*num2) -= 20; temp = num1; num1 = num2; num2 = temp; printf("%d : %d", *num1, *num2); return 0; } | cs |
이것은 go1의 값을 20 증가시키고, go2의 값을 20감소 시킨다음
num1과 num2가 가르키는 대상을 바꿔치기 한거다.
즉 num1는 go2를 가르키고 num2는 go1을 가르킨다.
따라서 이것을 출력해보면
이렇게 go1과 go2가 바뀐모습을 볼수가 있다.
'IT전공관련' 카테고리의 다른 글
코드업 함수 문제 (0) | 2017.04.12 |
---|---|
swap함수 구현하기 (0) | 2017.04.06 |
100제 풀기 (0) | 2017.04.05 |
strcpy, strlen, strcmp 총정리 보고서 (0) | 2017.04.02 |
배열 숙제 (0) | 2017.03.29 |