예습

[예습] 9월 30일 예습 정리

k-codestudy 2024. 10. 1. 03:32

함수에 포인터로 전달을 하면 포인터의 내용을 바꿀수 있다는 것을 공부해 보았다.

 

1. 예시 코드 (C++)

#include <iostream>

void function(int* nData);

void function(int* nData)
{
	*nData = 10;
}

int main()
{

	int nData1{};

	nData1 = 5;

	printf("호출 전 nData1값 : %d\n", nData1);
	
	function(&nData1);
	printf("호출 후 nData1값 : %d\n", nData1);
}
 
 

2. 코드 설명

변수 선언과 초기화

	int nData1{};

	nData1 = 5;
  • nData1이라는 변수를 선언하고 유니폼 초기화 이후  nData에 5값을 할당
  • nData1은 메모리의 한 위치에 저장되며, 그 주소는 &nData1으로 접근할 수 있다.

함수 정의

void function(int* nData);

void function(int* nData)
{
	*nData = 10;
}
  • void function(int* nData); = function이라는 이름의 함수를 정의하며, int* nData는 정수를 가리키는 포인터이다. 즉, nData는 정수형 데이터를 가리키는 메모리 주소를 받는다.
  • void function(int* nData) { *nData = 10; } = int* nData는 정수형 데이터를 가리키는 포인터를 매개변수로 가지게 되며, *nData = 10은 nData가 가리키는 메모리 위치에 있는 값을 10으로 변경을 하고 *nData는 nData가 가리키는 실제 데이터를 참조하는 것이다.

함수 호출

function(&nData1);
  • function 함수에 nData1의 주소(&nData1)를 전달함으로써 함수는 nData1이 저장된 메모리 위치에 접근하여 그 값을 변경할 수 있게 된다.

3. 출력 결과

함수 호출 전 nDat1의 값: 5
함수 호출 후 nData1의 값: 10
 
  • 함수 호출 전에는 nData1의 값이 5이고 함수 호출 후에는 nData1의 값이 10으로 변경이 되었다.
  • 함이는 function함수가 nData1의 주소를 통해 직접 메모리에 접근하여 값을 수정했기 때문이다.

 

4. 핵심 요약

  • 포인터를 함수에 전달할 때, 함수는 변수의 주소를 받는다
  • 포인터를 사용하면 함수 내부에서 해당 변수의 값을 직접 변경할 수 있다.
  • 이 방식은 "값에 의한 호출"이 아닌 "참조에 의한 호출"로, 함수 외부의 변수에도 영향을 미친다.