C언어 값에 의한 호출과 참조에 의한 호출 기초적 질문

dlwlstn321의 이미지

#include <stdio.h>
void modify(int value)
{
	value = 99;
}
int main(void)
{
	int number = 1;
	modify(number);
	printf("number = %d\n", number);
	return 0;
}

이경우 결과값이
number = 1 이 나오고

포인터 변수를 사용하여 나타낸

#include <stdio.h>
void modify(int *ptr)
{
	*ptr = 99;
}
int main(void)
{
	int number = 1;
	modify(&number);
	printf("number = %d\n", number);
	return 0;
}

이경우에는 결과값이
number = 99 가 나오더라구요.

혹시 이 두가지 경우의 차이점에 대해서 설명해주실 수 있나요?

pynoos의 이미지

두번째의 경우 main의 number에 대한 주소를 넘겨 받아 가지고있으므로 main 함수의 스택의 number 부분을 직접고치게 되어 값이 변경되는 것입니다.