열혈 C프로그래밍 13-1

2020. 1. 21. 00:13프로그래밍/C

문제 1.

길이가 5인 int형 배열 arr을 선언하고 이를 1, 2, 3, 4, 5 로 초기화 한다.

이 배열의 첫 번째 요소를 가리키는 포인터 변수 ptr을 선언한다.

그 다음 포인터 변수 ptr에 저장된 값을 증가시키는 형태의 연산을 기반으로

배열 요소의 값을 2씩 증가시키고 출력해보자.

void func_5() {
	
	int arr[5] = { 1, 2, 3, 4, 5 };
	int* ptr = arr;
	int len = sizeof(arr) / sizeof(arr[0]);

	for (int i = 0; i < len; i++) {
		*ptr += 2;
		ptr++;
	}
	for (int i = 0; i < len; i++) {
		printf("%d \n", arr[i]);
	}
}

 

문제 2.

문제 1에서는 포인터 변수 ptr에 저장된 값을 변경시켜가면서 배열요소에 접근하였다.

이번에는 포인터 변수 ptr에 저장된 값을 변경시키지 않고, ptr을 대상으로 덧셈연산하여

반환되는 주소값을 통해서 모든 배열요소에 접근하여 값을 2씩 증가시키자.

void func_6() {

	int arr[5] = { 1, 2, 3, 4, 5 };
	int* ptr = arr;
	int len = sizeof(arr) / sizeof(arr[0]);

	for (int i = 0; i < len; i++) {
		*(ptr + i) += 2;
	}
	for (int i = 0; i < len; i++) {
		printf("%d \n", arr[i]);
	}
}

 

문제 3.

길이가 5인 int형 배열 arr을 선언하고 1, 2, 3, 4, 5로 초기화한다.

이 배열의 마지막요소를 가리키는 포인터 변수 ptr을 선언한다. 그 다음 포인터 변수 ptr에

저장된 값을 감소시키는 형태의 연산을 기반으로 모든 배열요소에 접근하여

배열에 저장된 모든 정수를 더하여 출력하자

void func_7() {

	int arr[5] = { 1, 2, 3, 4, 5 };
	int sum = 0;
	int len = sizeof(arr) / sizeof(arr[0]);
	int* ptr = &arr[len-1];

	for (int i = 0; i < len; i++) {
		sum += *(ptr--);
	}
	printf("%d \n", sum);

}

 

문제 4.

길이가 6인 int형 배열 arr을 선언하고 이를 1, 2, 3, 4, 5, 6으로 초기화한다.

배열에 저장된 값의 순서가 6, 5, 4, 3, 2, 1이 되도록 작성하자

단, 배열의 앞과 뒤를 가리키는 포인터 변수 두 개를 선언해서 저장된 값의 순서를

뒤바꾼다.

void func_8() {

	int arr[6] = { 1, 2, 3, 4, 5 ,6 };
	int len = sizeof(arr) / sizeof(arr[0]);
	int* ptr_head = arr;
	int* ptr_tail = &arr[len - 1];
	int* temp;

	for (int i = 0; i < len / 2; i++) {
		temp = *ptr_head;
		*ptr_head = *ptr_tail;
		*ptr_tail = temp;

		ptr_head++;
		ptr_tail--;
	}

	for (int i = 0; i < len; i++) {
		printf("%d ", arr[i]);
	}
}

'프로그래밍 > C' 카테고리의 다른 글

Call By value 와 Call By reference  (0) 2020.01.21
연습문제  (0) 2020.01.21
열혈 C 프로그래밍 12-1  (0) 2020.01.17
열혈 C 프로그래밍 11-2  (0) 2020.01.17
연습문제  (0) 2020.01.17