728x90
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int SquareByValue(int);
int SquareByReference(int*);
int main()
{
int num = 0;
printf("정수를 입력하시오 : ");
scanf("%d", &num);
SquareByValue(num);
printf("%d \n", num);
SquareByReference(&num);
printf("%d \n", num);
return 0;
}
int SquareByValue(int num)
{
return num * num;
}
int SquareByReference(int *ptr)
{
int num = *ptr;
*ptr = num * num;
}
- SquareByReference 함수를 보게 되면 매개변수로 (int * ptr)을 받고 있다.
- 즉, 함수 호출 시 해당 변수의 주소값을 받아오겠다는 의미로 작용한다.
- int num = *ptr; 의 경우 *ptr은 위에서 main 함수에서 입력 받은 num의 주소값에 있는 값을 지칭하게 되고, int num은 main 함수에 정의된 num의 주소값에 있는 값을 가르키게 된다.
- 즉, SquareByReference 함수는 매개변수의 저장된 값을 복사해 오는 것이 아닌 해당 매개변수의 주소값에 있는 값을 가져오기 때문에 함수에서 해당 주소값의 값을 변경하게 되면 main 함수에 있는 변수의 값도 변경되게 된다.
#include <stdio.h>
void Swap(int* ptr1, int* ptr2);
int main()
{
int num1 = 10;
int num2 = 20;
printf("num1 num2 : %d %d \n", num1, num2);
Swap(&num1, &num2);
printf("num1 num2 : %d %d \n", num1, num2);
return 0;
}
void Swap(int* ptr1, int* ptr2)
{
int temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}
#include <stdio.h>
void SwapIntPtr(int** dp1, int** dp2);
int main()
{
int num1 = 10, num2 = 20;
int* ptr1, * ptr2;
ptr1 = &num1, ptr2 = &num2;
printf("*ptr1, *ptr2 : %d %d \n", *ptr1, *ptr2);
SwapIntPtr(&ptr1, &ptr2);
printf("*ptr1, *ptr2 : %d %d \n", *ptr1, *ptr2);
return 0;
}
void SwapIntPtr(int** dp1, int** dp2)
{
int* temp = *dp1;
*dp1 = *dp2;
*dp2 = temp;
}
728x90
'반도체, 임베디드 Study > C' 카테고리의 다른 글
C - 포인터 (0) | 2024.05.13 |
---|---|
C - 헷갈리는 개념 정리 (0) | 2024.04.17 |