본문 바로가기
윤성우 열혈강의 C 정리

[ C 열혈강의 ] 14장 연습문제

by 어린왕자1234 2022. 6. 29.
// [ 문제14 - 1  : callByValue & callbyReference ]  
// [문제1] 정수의 거듭제곱 반환(callbyvalue , callbyreference)


#include<stdio.h>

int SquareByValue(int num);
void SquareByReference(int* ptr);


int main(void)
{
	int num;
	printf("정수 입력 :");
	scanf_s("%d", &num);

	printf("CallByValue 결과 :%d\n", SquareByValue(num));
	SquareByReference(&num);
	printf("CallByReference 결과 :%d\n", num);
}

int SquareByValue(int num)
{
	return num * num;
}

void SquareByReference(int* ptr)
{
	*ptr *= (*ptr);
}

 


 

// [ 문제14 - 1  : callByValue & callbyReference ]  
// [문제2] 포인터를 이용한 swap

// num1 ->2번째 요소에
// num2 ->3번째 요소에
// num3 ->1번째 요소에 저장

#include<stdio.h>

void Swap3(int* ptr1, int* ptr2, int* ptr3);

int main(void)
{
	int num1 = 1;
	int num2 = 2;
	int num3 = 3;

	printf("num1 :%d, num2 :%d, num3 :%d\n",num1,num2,num3);
	Swap3(&num1, &num2, &num3);
	printf("num1 :%d, num2 :%d, num3 :%d\n",num1,num2,num3);


}
void Swap3(int* ptr1, int* ptr2, int* ptr3)
{
	int temp = *ptr3;
	*ptr3 = *ptr2;
	*ptr2 = *ptr1;
	*ptr1 = temp;

}

 


 

// [ 문제14 - 2  : const 선언에 대한 추가적인 이해 ]  
// [문제1] const 추가 이유?


#include<stdio.h>

void ShowAllData(const int* arr, int len);

int main(void)
{
	int arr[3] = { 1,2,3 };
	ShowAllData(arr, 3);
}
void ShowAllData(const int* arr, int len)
{
	int i;
	for (i = 0; i < len; i++)
	{
		printf("%d", arr[i]);
	}
}

 


 

// [ 문제14 - 2  : const 선언에 대한 추가적인 이해 ]  
// [문제2] const 추가 이유?


#include<stdio.h>

void ShowData(const int* ptr);

int main(void)
{
	int num = 10;
	int* ptr = &num;
	ShowData(ptr);
	return  0;
}
void ShowData(const int* ptr)
{
	int* rptr = ptr;          // warning c4090 경고 발생
	printf("%d\n", *rptr);
	*rptr = 20;
}