본문 바로가기
Jaden's spectrum/📂 Programming Languages

[c++] 9. 포인터 & 어드레스 연산자

by JadenWe 2025. 3. 18.
반응형

C++ 포인터와 어드레스 연산자(&)

C++에서 포인터(pointer)는 변수의 메모리 주소를 저장하는 변수입니다. 또한, 어드레스 연산자(&)는 변수의 메모리 주소를 얻을 때 사용됩니다. 포인터를 활용하면 동적 메모리 할당, 배열 처리, 함수 매개변수 전달 등에서 효율적인 프로그래밍이 가능합니다.

 

1. 포인터의 개념

포인터는 변수의 메모리 주소를 저장하는 변수입니다. 포인터를 사용하면 데이터를 직접 참조하지 않고, 주소를 통해 접근할 수 있습니다.

포인터 변수 선언

자료형* 포인터변수명;
int* ptr; // 정수를 가리키는 포인터 선언

ptr은 정수형 데이터를 가리키는 포인터입니다.

 

2. 어드레스 연산자(&)

어드레스 연산자 &는 변수의 메모리 주소를 반환합니다.

#include <iostream>
using namespace std;

int main() {
    int num = 10;
    cout << "num의 값: " << num << endl;
    cout << "num의 주소: " << &num << endl;
    return 0;
}
num의 값: 10
num의 주소: 0x7ffee2a6d4bc  // (주소는 실행 환경에 따라 다름)

변수 앞에 &를 붙이면 해당 변수의 메모리 주소를 얻을 수 있습니다.

 

3. 포인터 활용

포인터는 변수의 주소를 저장하고, 해당 주소를 통해 값을 참조할 수 있습니다.

포인터에 주소 저장하기

#include <iostream>
using namespace std;

int main() {
    int num = 10;
    int* ptr = &num; // num의 주소를 포인터 ptr에 저장
    cout << "ptr이 가리키는 값: " << *ptr << endl;
    return 0;
}
ptr이 가리키는 값: 10

간접 참조 연산자(*)

포인터 변수를 사용하여 메모리 주소에 저장된 값을 가져오거나 수정할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
    int num = 20;
    int* ptr = &num;
    
    cout << "num의 원래 값: " << num << endl;
    *ptr = 50; // 포인터를 이용해 값 변경
    cout << "변경된 num 값: " << num << endl;
    return 0;
}
num의 원래 값: 20
변경된 num 값: 50

 

 

4. 동적 메모리 할당

포인터를 사용하면 동적 메모리 할당이 가능합니다. new 연산자를 사용하여 실행 중에 메모리를 할당할 수 있습니다.

#include <iostream>
using namespace std;

int main() {
    int* ptr = new int; // 정수형 메모리 할당
    *ptr = 100; // 값 저장
    
    cout << "동적 할당된 값: " << *ptr << endl;
    delete ptr; // 메모리 해제
    return 0;
}
동적 할당된 값: 100
 

5. 배열과 포인터

배열은 내부적으로 포인터와 유사하게 동작합니다. 배열의 이름 자체가 첫 번째 요소의 주소를 나타냅니다.

#include <iostream>
using namespace std;

int main() {
    int arr[3] = {1, 2, 3};
    int* ptr = arr; // 배열 이름은 첫 번째 요소의 주소
    
    cout << "배열 첫 번째 값: " << *ptr << endl;
    cout << "배열 두 번째 값: " << *(ptr + 1) << endl;
    cout << "배열 세 번째 값: " << *(ptr + 2) << endl;
    return 0;
}
배열 첫 번째 값: 1
배열 두 번째 값: 2
배열 세 번째 값: 3
 

6. 함수에서 포인터 사용

포인터를 사용하여 함수에서 변수의 값을 직접 변경할 수 있습니다.

#include <iostream>
using namespace std;

void changeValue(int* ptr) {
    *ptr = 99; // 포인터를 통해 값 변경
}

int main() {
    int num = 10;
    cout << "변경 전: " << num << endl;
    changeValue(&num);
    cout << "변경 후: " << num << endl;
    return 0;
}
변경 전: 10
변경 후: 99

 

 

 

 

[c++] 8. 함수

1. 함수의 기본 구조C++ 함수는 다음과 같은 구조를 가집니다.반환형 함수이름(매개변수) { // 함수 내용 return 반환값;}함수 선언과 정의C++에서 함수를 사용하려면 선언(declaration)과 정의(definition)

clarelee.tistory.com

반응형