포인터
-
함수 호출시 매개변수 전달 방법 3가지Programming🧑💻/Cpp 2025. 2. 5. 23:29
값에 의한 전달 ( Pass by Value ) 함수 호출시 매개 변수의 복사본이 호출된 함수의 스택 메모리에 생성됩니다. 원본 데이터와 완전히 독립된 메모리 공간을 사용합니다. 함수 종료시 복사본은 스택에서 자동으로 해제 됩니다. void processData(int data) { data = data + 1; // 값을 복사했기 때문에 원본 데이터에 영향 없음}int main() { int value = 5; processData(value); print("value=%d",value); // value 값은 여전히 5} 포인터에 의한 전달 ( Pass by Pointer )메모리 주소값만 복사되어 전달됩니다.포인터 자체는 호출된 스택 프레임내에 생성되지만 크기는 항상 고정됩..
-
포인터의 크기는 어떻게 결정될까?Programming🧑💻/Cpp 2025. 2. 3. 23:48
변수는 변수를 선언할때 지정한 타입에 따라 값을 저장하기 위해 사용할 수 있는 메모리의 양이 결정됩니다. 예를 들어 일반적인 경우 char 의 경우에는 1byte , int의 경우에는 4byte가 해당 변수를 위한 메모리 공간으로 할당됩니다. 그렇다면 포인터 자체의 크기는 어떻게 될까요? 이 질문에 답하기 위해 간단한 C++ 코드를 작성하여 실행하면 32 비트 시스템에서는 모든 포인터가 4바이트, 64 비트 시스템에서는 모든 포인터가 8바이트로 출력됩니다. 비트 시스템은 뭐고 왜 이런 결과가 나오게 되는 걸까요?#include using namespace std;int main() { // 다양한 타입의 포인터 선언 int* intPtr; char* charPtr; double* d..
-
이중 포인터Programming🧑💻/Cpp 2025. 2. 1. 12:24
포인터는 일반적으로 다른 변수의 메모리 주소값을 저장하는 데 사용됩니다. 하지만 때로는 포인터 자체의 메모리 주소를 저장해야 할 필요가 있습니다. 이럴 때 포인터의 포인터(이중 포인터)를 사용합니다.int x = 10; // 변수 x (값: 10)int* p = &x; // 포인터 p는 x의 메모리 주소를 저장int** q = &p; // 이중 포인터 q는 포인터 p의 메모리 주소를 저장int*** r = &r;만약 변수 x가 메모리 주소 220번지에 있고, 포인터 p가 209번지에 있다면:p는 x의 주소인 220을 저장q는 p의 주소인 209를 저장r은 q의 주소인 199를 저장 이렇게 포인터의 포인터를 사용하면 포인터 자체의 메모리 주소를 참조하고 관리할 수..
-
포인터도 타입이 필요한 이유Programming🧑💻/Cpp 2025. 1. 31. 12:33
포인터 연산포인터 연산에서 중요한 점은 포인터의 타입에 따라 실제 증감되는 메모리 주소의 크기가 달라진다는 것입니다.char* ptr1 = (char*)1000; // char는 1바이트int* ptr2 = (int*)1000; // int는 4바이트double* ptr3 = (double*)1000; // double은 8바이트ptr1++; // 주소값: 1001ptr2++; // 주소값: 1004ptr3++; // 주소값: 1008char 포인터는 1바이트씩 증가int 포인터는 4바이트씩 증가double 포인터는 8바이트씩 증가즉, ptr++ 연산을 수행할 때 실제로는 다음과 같은 계산이 이루어집니다.새로운주소 = 현재주소 + (sizeof(포인터타입) * 1)포인터 타입을 제한하는 이..
-
변수와 포인터Programming🧑💻/Cpp 2025. 1. 30. 23:48
변수 선언변수를 선언하면 해당 변수의 값을 저장하기 위한 메모리를 할당한다.이때 얼만큼의 메모리를 할당할지는 변수의 타입에 따라 결정된다.예를 들어 일반적으로 int 타입의 경우에는 4byte를 char 타입의 경우 1byte를 할당한다.2025.01.30 - [Programming🧑💻/Cpp] - 변수와 포인터시스템 내부적으로 룩업 테이블이라는 것을 가지고 있으며 해당 테이블에는 변수명, 변수 타입, 메모리 시작 주소를 가지고 있다.변수를 선언한 다음에 `a = 5` 명령어가 실행되면 내부적으로는 룩업 테이블에서 변수명 a에 대응하는 메모리 시작 주소를 찾아가서 5라는 값을 저장한다.포인터란?다른 변수의 주소를 값으로 저장하는 변수변수를 선언하는 이유는 숫자나 문자와 같은 특정한 '값'을 저장하기..