티스토리 뷰

*(++ptr)=20; //ptr에 저장된 값 자체를 변경
*(ptr+1)=20; //ptr에 저장된 값은 변경하지 않음

위의 두 문장 모두 현재 ptr이 가르키는 위치에서 4바이트씩 떨어진 메모리 공간에 20을 저장하는 문장이지만 연산 이후 포인터 변수 ptr에는 차이가 있다. 첫번째 문장의 경우 ++ 연산의 결과로 인해 포인터 변수 ptr에 저장된 값이 4만큼 증가한다. 하지만 두 번째 문장의 경우 + 연산으로 인해서는 ptr에 저장된 값이 증가하지 않는다. 다만 증가된 값을 연산의 결과로 얻어서 * 연산을 진행하는 것이다. 

 

 

 


 

 

예시로 이해해보도록 하자 ! 👩🏻‍💻

 

 

문제 1) 길이가 5인 int형 배열 arr을 선언하고 이를 1,2,3,4,5로 초기화한 다음, 이 배열의 첫 번째 요소를 가르키는 포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로 배열요소에 접근하면서 모든 배열요소의 값을 2씩 증가시키고, 정상적으로 증가가 이뤄졌는지 확인하는 예제를 작성해보자. 

 

생각과정

1) int arr[5] 로 배열을 선언하고 초기화 시켜준다.

2) arr[0]을 가르키는 포인터 변수 ptr을 선언한다.

3) 포인터 변수의 값 자체를 증가시켜야하니 전위 연산자를 이용해 모든 배열요소의 값을 2씩 증가시켜준다. 

4) for문을 이용해 출력한다. 

 

내가 생각한 답안

#include <stdio.h>

 int main(void){
    int arr[5]={1,2,3,4,5}; // 배열 선언 및 초기화
    int *ptr=arr; // arr 배열의 첫번째 요소를 가르키는 포인터 변수 선언
    for(int i=0;i<5;i++)
    {
        *(ptr)=*(ptr)+2; //ptr의 요소 2씩 증가
        ptr++; 
    }
    for(int i=0;i<5;i++)
        printf("%d",arr[i]);
    return 0;
}

답안과 동일

 

 

 

 

문제 2) 문제 1에서는 포인터 변수 ptr에 저장된 값을 변경시켜가면서 배열요소에 접근하라고 하였다. 그런데 이번에는 포인터 변수 ptr에 저장된 값을 변경시키지 않고, ptr을 대상으로 덧셈연산을 하여 그 결과로 반환되는 주소 값을 통해서 모든 배열요소에 접근하여 값을 2씩 증가시키는 예제를 작성하여라. 

 

답안

#include <stdio.h>

 int main(void){
    int arr[5]={1,2,3,4,5};
    int *ptr=arr;
    for(int i=0;i<5;i++)
        ptr[i]=ptr[i]+2; //*(ptr+i)+=2; 와 동일
    for(int i=0;i<5;i++)
        printf("%d",arr[i]);
    return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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 26 27 28 29 30 31
글 보관함