티스토리 뷰
*(++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;
}
'언어 > C' 카테고리의 다른 글
[C] 간단한 계산기 프로그램 구현하기 (0) | 2023.09.04 |
---|---|
[C언어] 1차원 배열이름의 포인터 형과 2차원 배열이름의 포인터 형 (0) | 2023.03.08 |
[C언어] 함수의 인자로 배열 전달하기 (0) | 2023.03.06 |
[C언어] 포인터의 포인터 (0) | 2023.03.02 |
[C언어] 다차원 배열 (0) | 2023.02.19 |