C++
<윤성우의 열혈 C프로그래밍> :: 13. 포인터와 배열! 함께 이해하기 문제풀이
미누라니까요
2023. 9. 4. 13:36
728x90
반응형
SMALL
문제 13-1
문제 1
길이가 5인 int형 배열 arr을 선언하고 이를 1,2,3,4,5로 초기화한 다음, 이 배열의 첫 번째 요소를 가리키는 포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로 배열요소에 접근하면서 모든 배열요소의 값을 2씩 증가시키고, 정상적으로 증가가 이루어졌는지 확인하는 예제를 작성해보자.
#include<stdio.h>
int main(void)
{
int arr[5] = {1,2,3,4,5};
int * ptr = &arr[0];
for(int i=0;i<5;i++){
*ptr += 2;
ptr++;
}
for(int i=0;i<5;i++){
printf("%d ",arr[i]);
}
printf("\n");
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[0];
for(int i=0;i<5;i++){
*(ptr+i) += 2;
}
for(int i=0;i<5;i++){
printf("%d ",*(ptr+i));
}
printf("\n");
return 0;
}
문제 3
길이가 5인 int형 배열 arr을 선언하고 이를 1,2,3,4로 초기화한 다음, 이 배열의 마지막 요소를 가리키는포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에 저장된 값을 감소시키는 형태의 연산을 기반으로 모든 배열요소에 접근하여, 배열에 저장된 모든 정수를 더하여 그 결과를 출력하는 프로그램을 작성해보자.
#include<stdio.h>
int main(void)
{
int arr[5] = {1,2,3,4,5};
int *ptr = &arr[4];
int sum = 0;
for(int i=0;i<5;i++){
sum += *(ptr-i);
}
printf("%d\n",sum);
return 0;
}
문제 4
길이가 6인 int 형 배열 arr를 선언하고 이를 1,2,3,4,5,6으로 초기화한 다음, 배열에 저장된 값의 순서가 6,5,4,3,2,1이 되도록 변경하는 예제를 작성해보자. 단, 배열의 앞과 뒤를 가리키는 포인터 변수 두 개를 선언해서 이를 활용하여 저장된 값의 순서를 뒤바꿔야 한다.
#include<stdio.h>
int main(void)
{
int arr[6] = {1,2,3,4,5,6};
int *ptr1 = &arr[0];
int *ptr2 = &arr[5];
int temp = 0;
for(int i=0;i<3;i++){
temp = *(ptr1+i);
*(ptr1+i) = *(ptr2-i);
*(ptr2-i) = temp;
}
for(int i=0;i<6;i++){
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
728x90
반응형
LIST