기록하고 까먹지 말기

과제8 - Pointer_Array (1 ~ 5) 본문

전공/C

과제8 - Pointer_Array (1 ~ 5)

yha97 2021. 6. 22. 13:38

과제 7의 마지막 문제와 같이 array의 element를 포인터를 사용해 출력하는 문제다.

 

	#include <stdio.h>

int main(){
	int arr[5]; // declaring and initializing an int array length 5
	int i=0;
	int* ptr = arr; // declaring pointer pointing arr
	for(i=0; i<5; i++){
		*ptr = i + 3; // accessing the array element based on an operation with pointer
		printf("%d value in the ith array : %d\n", i, *ptr); // printing output
		ptr++; // increasing pointer
	}
	return 0;
}

기본 array의 element값은 모두 0으로 초기화되기 때문에 *ptr = i + 3;을 통해 샘플의 아웃풋 결과를 도출하였다.

 

그리고 *ptr을 통해 포인팅하는 메모리가 갖고 있는 값을 출력하였다.

 

출력 이후 다음 메모리를 가리키기 위해 ptr++;

 

 

두 수를 입력받고 두 수의 합을 구하되 이를 포인터로 해결하는 문제다.

 

#include <stdio.h>

int main(){
	int a, b; // declaring 2 variables
	int* aptr = &a; // declaring 2 pointers pointing each a and b
	int* bptr = &b;
	
	// entering numbers a and b with pointers
	printf("Enter any two numbers: ");
	scanf("%d %d", aptr, bptr);
	
	int sum = *aptr + *bptr; // arithmetic operation with pointer
	
	printf("Sum = %d", sum); // printing output
	return 0;
}

각각 a, b를 가리키는 포인터 변수를 선언하고 sum을 초기화 및 aptr, bptr이 가리키는 메모리의 값을 더하고 이를 출력함으로써 문제를 해결하였다.

 

 

포인터를 통해 swap하는 문제다.

 

#include <stdio.h>

void swap(int* a, int* b){ // declaring function swapping two variables
	// swapping with pointers
	int temp = *a;
	*a = *b;
	*b = temp;
	return;
}

int main(){
	// declaring 2 variables and entering value from user
	int n1, n2;
	printf("Enter two numbers: ");
	scanf("%d %d", &n1, &n2);
	
	// printing values of num1, and num2 before swapping
	printf("Before swapping in main nValue of num1 = %d\n", n1);
	printf("Value of num2 = %d\n", n2);
	
	swap(&n1, &n2); // call by referene
	
	// printing swapped values of num1 and num2 after swapping
	printf("\nAfter swapping in main nValue of num1 = %d\n", n1);
	printf("Value of num2 = %d\n", n2);
	
	printf("\nAfter swapping in main nValue of num1 = %d\n", n1);
	printf("Value of num2 = %d\n", n2);
	
	
	return 0;
}

swap함수에 인자를 전달할 때는 지역변수화를 막기 위해 n1과 n2의 주소값을 전달함으로써 메모리에 직접 접근하여 값을 swap하는 작업을 한다는 것을 명심해야 한다.

 

 

Q3의 swap하는 과정을 array를 통해 반복적으로 행하는 문제다.

 

#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size

// declaring swapping function
void swap(int* aptr, int* bptr, int len){
	int i=0;
	int temp = 0;
	for(i=0; i<len; i++){
		// logic to swap two arrays with pointers
		*aptr ^= *bptr;
		*bptr ^= *aptr;
		*aptr ^= *bptr;
		*aptr++; // increasing address
		*bptr++;
	}
	return;
}

int main(){
	int n, i; // declaring and input size of array
	int a[MAX_SIZE] = {0, }; // declaring arrays with maximum size
	int b[MAX_SIZE] = {0, };
	printf("Enter size of array: ");
	scanf("%d", &n);
	
	// getting inputs n elements in 2 array from user
	printf("Enter %d elements in source array: ", n);
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	printf("Enter %d elements in destination array: ", n);
	for(i=0; i<n; i++){
		scanf("%d", &b[i]);
	}
	printf("\n\n");
	
	// printing values of elements before swapping
	printf("Source array before swapping: ");
	for(i=0; i<n; i++){
		printf("%d, ", a[i]);
	}
	printf("\n");
	printf("Destination array before swapping: ");
	for(i=0; i<n; i++){
		printf("%d, ", b[i]);
	}
	printf("\n\n");
	
	// swap with function
	swap(a, b, n);
	
	// printing output of swapped array
	printf("Source array after swapping: ");
	for(i=0; i<n; i++){
		printf("%d, ", a[i]);
	}
	printf("\n");
	printf("Destination array after swapping: ");
	for(i=0; i<n; i++){
		printf("%d, ", b[i]);
	}
	
	return 0;
}

이전에 배웠던 xor 연산자 ^를 통해 swap을 하고 싶어 temp 변수를 만들지 않고 위와 같이 행하였다.

 

len의 경우 for문의 한계치를 정하기 위해 인자로써 사용하였다.

 

 

array size와 그 element 값을 입력받고 출력하는 문제이다.

 

#include <stdio.h>
#define MAX_SIZE 100 // Maximum array size

int main(){
	// declaring variabels, array, and pointer
	int n, i;
	int arr[MAX_SIZE] {0, };
	int* ptr= arr; // pointing array
	printf("Enter size of array: "); // inputs size of array from user
	scanf("%d", &n);
	
	printf("Enter elements in array:\n"); // inputs elements in array from user
	for(i=0; i<n; i++){
		scanf("%d", &arr[i]);
	}
	
	// printing output
	printf("Array elements: ");
	for(i=0; i<n; i++){
		printf("%d, ", *ptr); // printing elements with pointer
		ptr++; // going next element's memory address
	}
	return 0;
}

 

'전공 > C' 카테고리의 다른 글

과제9 - Pointer Dynamic (1 ~ 5)  (0) 2021.06.22
과제8 - Pointer Array (6 ~ 10)  (0) 2021.06.22
과제7 - Array (1 ~ 4)  (0) 2021.06.22
Mid Coding Test  (0) 2021.06.22
과제 6 - Function (6 ~ 9)  (0) 2021.06.22