danbibibi
article thumbnail
Published 2023. 6. 29. 11:37
[C] 포인터 언어/C, C++

포인터

  • 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수 포인터도 하나의 타입
  • 메모리에 직접 접근, 제어 가능 (즉, 포인터 = 메모리 주소와 연관되어 있는 문법)
  • 포인터 변수의 크기는 운영체제의 bit 수에 따라 달라짐 32bit(4byte) / 64bit(8byte)
  • NULL, nullptr 키워드를 이용하여 초기화 가능
초기화가 이루어지지 않는 경우, 임의로 저장된 주소의 값에 마음대로 접근해서 변경해버리면,
최악의 상황에는 프로그램 메모리가 꼬여서 프로그램이 날아갈 수 있기 때문에 초기화가 중요!

 

char *pc = NULL; // char형 변수의 주소 값
int *pi = nullptr; // int형 변수의 주소 값
double *pd; // double형 변수의 주소 값
포인터  변수의 크기가 항상 같지만, 데이터 타입을 선언하는 이유
그 주소값을 찾아갔을 때, 얼만큼 읽어야 할지 알기 위해서!

 

int a = 10;
int * ptr = &a; // a의 주소를 ptr 포인터 변수에 저장

// ptr(a의 주소)로 가서
// *ptr (그 주소에 해당하는 값을)의 값을 100으로 변경
*ptr = 100;
printf("변경후 a의 값 : %d", a); // 100
ptr(a의 주소)에 해당하는 값 10을 100으로 변경
포인터 변수가 가리키는 주소 값으로 찾아가서 그곳의 value 값을 변경

 

메모리 주소

#include <stdio.h>

int main(){
    int n = 10;
    double d = 3.141592;
}

int (4byte) / double (8byte)

 

포인터 연산

  • +, - 연산 진행시 포인터의 타입에 따라 결과가 달라짐
  • ex)  int 형 변수 0x7ffdc24ae874+ 1 = 0x7ffdc24ae878
int main(){

    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    
    for (int i = 0; i < 10; i++){
        printf("%x\n", &arr[i]);
    }

    int* ptr = arr;
    for(int i = 0; i < 10; i++){
        printf("%d\n", *ptr); 
        ptr++;
    }
}

'언어 > C, C++' 카테고리의 다른 글

[C++] Standard Template Library - STL  (0) 2023.08.24
[C++] 객체 지향 프로그래밍  (0) 2023.08.16
[C++] new, delete  (0) 2023.08.14
[C++] 참조자(reference)  (0) 2023.08.14
[C++] namespace  (0) 2023.08.11
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로