<문제 1>
#include<stdio.h>
int squareByValue(int n)
{
return n * n;
}
void squarebyreference(int* ptr)
{
int num = *ptr;
*ptr = num * num;
}
int main(void)
{
int num = 10;
printf("%d\n", squareByValue(num));
squarebyreference(&num);
printf("%d\n", num);
return 0;
}
squarebyreference 함수 안의 변수 num은 squarebyreference함수의 지역변수 num이 아니라, main함수에 있는 num이다. 매개변수를 통해 num에 대한 주솟값을 받았기 때문에 가능한 것이다.
squareByValue 함수는 값을 반환해달라는 조건이 있으므로 위와 같이 함수를 작성하여야 하고,
squarebyreference 함수는 정수가 저장되어 있는, 변수의 주소 값을 인자로 받아서, 해당 변수에 저장된 값의 제곱을 그 변수에 다시 저장해야 한다. 는 조건이 있다.
squarebyreference(&num); : main함수 안의 함수 호출 문인데, 인자로 전달할 값이 변수 num의 주솟값이다.
void squarebyreference(int* ptr) : 이 함수에서 num의 주 솟값을 인자로 전달받았으므로, int * ptr = &num이라고 할 수 있다.
int num = *ptr; : 변수 num이 값은 *ptr의 값과 같다.
*ptr = num * num; : 변수 num의 제곱 값이 *ptr의 값에 저장되었다. 그런데 *ptr의 값은 변수num의 값이므로 이 제곱값이 변수 num에 저장되었다고 볼 수 있다.
<문제 2>
#include<stdio.h>
void swap3(int* ptr, int* ptr2, int* ptr3)
{
int num1 = *ptr;
int num2 = *ptr2;
int num3 = *ptr3;
int temp;
temp = *ptr;
*ptr = *ptr3;
*ptr3 = *ptr2;
*ptr2 = temp;
}
int main(void)
{
int num1 = 10;
int num2 = 20;
int num3 = 30;
swap3(&num1, &num2, &num3);
printf("%d %d %d", num1, num2, num3);
return 0;
}