전공/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;
}