#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
'Embedded > 3. C, C#, Python' 카테고리의 다른 글
C - 헷갈리는 개념 정리 (0) | 2024.04.17 |
---|---|
C# - 클래스 (1) | 2024.04.15 |
C# - 구조체 / 열거형 (0) | 2024.04.15 |
C# - 코드 작성 연습 (숫자 맞추기 게임) (0) | 2024.04.10 |
C# - 배열, 함수 (코드 작성 연습) (0) | 2024.04.08 |