728x90
반응형
저번 피드에서 C언어의 포인터에 대해 간단히 알아보았습니다.
2022.10.13 - [C언어] - [C언어] 포인터 기초 (선언) - 공부하는 도비
오늘은 포인터가 대체 왜 필요한지 설명해보려고 합니다.
우선 아래 두 가지 코드를 비교해볼게요.
두 코드 모두 처음 선언한 value 변수에 100을 더하는 코드이고, 차이는 함수의 인자에 값을 넘겨주는 call by value 함수이냐 아니면 주소 값을 넘겨주는 call by reference 함수이냐 입니다.
첫 번째 코드에서 function 함수 내 vaule 값의 변화를 보기 위해 출력문을 추가해보았습니다.
첫 번째 코드의 function 함수는 지역변수이기 때문에, 함수 내에서만 연산 결과가 유효하고 다시 main으로 와 value 변수의 값을 출력하면 변화가 없는 걸 확인할 수 있습니다.
이러한 상황을 막기 위해 C에서는 포인터를 사용하고, 포인터의 특징을 정리해보면
포인터는 특정한 변수의 주소 그 자체를 가리키기 때문에 이를 응용하여 다양한 연산을 수행할 수 있고, 프로그램의 어떠한 위치에서 시행되더라도 특정한 주소를 그대로 이용하기 때문에 값이 즉시 변경된다는 특징이 있습니다.
따라서, 포인터를 사용하면 프로그램 전역에서 변수 값을 컨트롤할 수 있게 됩니다.
포인터의 두번째 특징은 선언한 변수가 다른 곳에 필요할 때, 변수 그대로를 복사하지 않아 전송 효율을 높일 수 있습니다.
보통 call by value 함수일때, 아래 그림처럼 선언한 변수가 메모리 한 공간에 복사가 됩니다.
그리고, 함수에 값이 입력될 땐 사본인 temp가 사용됩니다.
이 경우엔 불필요한 메모리가 낭비되겠죠?
반면, 포인터는 메모리를 낭비하지 않고 변수의 주소값을 딱 알려주니깐 컴퓨터의 메모리에 보다 직접적으로 접근해서, 이를 제어할 수 있게 되는 거죠.
이렇게 해서 포인터의 중요성에 대해 알아보았습니다. 다음피드는 포인터를 이용한 배열 접근에 대해 알아보겠습니다.
'C Programming' 카테고리의 다른 글
C언어 포인터를 이용하여 배열의 모든 원소 역순 출력 함수 - 공부하는 도비 (0) | 2022.10.28 |
---|---|
양의 정수 값을 입력 받아 입력한 정수까지의 소수를 구하는 함수 작성 - 공부하는 도비 (0) | 2022.10.28 |
C언어 포인터 기초 (선언) - 공부하는 도비 (0) | 2022.10.13 |
C언어 행렬 곱셈 - 공부하는 도비 (1) | 2022.10.03 |
C언어 2차원 배열의 합 - 공부하는 도비 (0) | 2022.10.03 |