본문 바로가기

IT전공관련

포인터 보고서

포인터에 대한 보고서




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;
}

cs



이렇게 *이 주소로 가서 정수 값을 가지고 와서 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