포인터 보고서


3-1. 포인터란 ?

어떤 대상을 가리키는 것

포인터는 메모리에 저장된 것을 가리키기 위한 것이다. 가리킨다는 것은 포인터가 어떤 대상의 주소를 저장하고 있다는 것을 의미한다.

포인터는 메모리 주소를 저장하기 위한 변수이다.


3-2. 포인터를 사용하는 이유


1) 함수로 하나 이상의 값을 리턴하기 위해


2) 메모리의 정보를 쉽게 다루기 위해서


3) 메모리의 공간을 효율적으로 사용하기 위해서


3-3. 포인터 선언법

     

타입 *포인터명; //지정된 차입의 값을 가리키기 위한 포인터를 선언


int * ptr ;

ptr : 포인터의 이름

int * : 포인터의 타입

int : 포인터의 대상타입(포인터가 가리키는 대상의 타입

ptr가 가리키는 대상의 타입이 'int'이고, ptr의 타입은 'int*'이다.


3-4. 포인터 사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
 
int main() {
    int i = 5;
    int *= &i;
 
    printf("i =%d\n", i);
    //변수 i에 저장된 수
    printf("&i =%p\n"&i);
    //변수 i의 주소
    printf("p =%p\n", p);
    //포인터에 저장된 주소
    printf("&p=%p\n"&p);
    //포인터 p의 주소
 
    return 0;
}
cs

변수 i의 값, 변수 i의 주소, 포인터에 저장된 주소, 포인터 p의 주소를 출력



3-5. &연산자와 *연산자

1)   '&'연산자 = 주소 연산자 : 피연산자의 주소를 반환한다.

int i = 1;

int *ptr = &i;  //변수 i의 주소를 포인터 ptr에 저장


2)  '*'연산자 = 역참조 연산자 : 지정된 주소에 저장된 값을 반환한다.


포인터가 가리키는 대상에 저장된 값을 가져올 때는 '*'연산자 사용한다.  피연산자(포인터)가 가리키는 주소에 저장된 값을 읽어서 반환한다. 

int i=200 ;

int *ptr = &i ;  //포인터 ptr이 변수 i를 가리키게 된다.


3-6. Call by value 와 Call by reference

Call by value: 

main 함수에서 선언한 변수 n에 10을 넣어주고 값을 받아서 func함수에서 다시 20을 넣어주는데 main함수에서의 n=10과 func함수에서의 n=20은 메모리상 다른 위치에 상주해 있으므로 다시 main함수로 넘어오면 수정했던 값이 없어진다.


Call by reference:

변수 n의 주소를 함수 func의 n에게 넘겨주었으므로 func에서 넣은 20이 그대로 n에 들어가게 된다.(둘은 같은 주소를 공유하고 있으므로)



3-7. Swap 함수 구현 및 설명


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<stdlib.h>
void swap_r(int *a, int *b);
 
int main() {
    int a, b;
    swap_r(&a, &b);
    printf("%d %d\n", a, b);  //주소를 이용하여 바꾸어줌
    system("pause");
    return 0;
}
void swap_r(int *a, int *b) {
    int temp;
    temp = *a;
    *= *b;
    *= temp;
}
cs

설명 :

main함수에서 &a,&b를 이용하여 swap_r함수에 값을 전달했기 때문에 두 함수의 a,b는 같은 주소를 공유하고 있다.

swap_r함수에서 변수 temp를 선언하여 a->temp / a=b / b=temp로 두 a,b값을 바꿔주고 값을 main에서 출력하면 바뀐 두 값이 정상적으로 출력된다.

'@C언어 : Layer7' 카테고리의 다른 글

함수 문제풀이  (0) 2018.04.09
수업 문제풀이  (0) 2018.04.09
함수 보고서  (0) 2018.04.06
오름차순 문제  (0) 2018.04.04
달팽이 배열  (0) 2018.04.04

+ Recent posts