C,C++

[C,C++] 포인터 배열, 배열 포인터

2023. 2. 5. 21:57
목차
  1. 1. 포인터 배열 (Pointer Array)
  2. 2. 배열 포인터(Array Pointer)
반응형

C/C++ 를 쓸때마다 항상 헷갈리는 단어가 존재한다.

 

바로 "포인터 배열"과 "배열 포인터" 이다.

 

그럼 두 단어가 의미하는바가 어떤식으로 다른지 알아보자.

 

1. 포인터 배열 (Pointer Array)

 

포인터 배열은 말 그대로 "포인터의 배열"을 의미한다.

 

배열이란 단일 식별자를 통해 같은 자료형의 여러 변수에 접근할 수 있게 해주는 집계 데이터유형 이다.

 

즉, 같은 자료형의 변수를 일렬로 늘어놓은 형태라고 생각하면 된다.

 

포인터 배열은 변수 자체가 포인터를 의미하므로

 

포인터 변수를 일렬로 늘어놓은 데이터 유형이라고 생각하면 된다.

 

#include <iostream>

using namespace std;


int main()
{
    int a = 10;
    int b = 20;
    int c = 30;

    int *ptr_array[3] = {&a, &b, &c};

    for (int i = 0; i < 3; i++) {
        cout << "addr : " << ptr_array[i] << " value : " << *ptr_array[i] << endl;
    }


}

 

3개짜리의 포인터 배열을 선언 한 후 각 배열 인덱스에

 

포인터 값을 넣은 예제이다.

 

아래의 각 배열의 주소값의 증가율을 보면 4byte 씩 차이나는 것을 볼 수 있다.

 

왜 4바이트씩 차이나는지 궁금하다면 아래의 그림을 참고하길 바란다.

 

ptr_array[i] 내에는 결국 데이터의 주소 즉 포인터 값이 들어있을 것이다.

 

현재 테스트하는 컴퓨터 환경은 64비트 환경이므로 정수형의 크기가 4byte이다.

 

즉, ptr_array[0], ptr_array[1], ptr_array[2] 의 시작값이 4씩 차이나는 것이 합당하다.

 

 

즉, 위의 그림에서 ptr_array 에 들어있는 값은

 

데이터값이 아닌 포인터 값임을 알 수 있다.

 

 

 

2. 배열 포인터(Array Pointer)

 

배열 포인터는 말 그대로 "배열을 가리키는 포인터" 라고 생각하면 된다.

 

아래와 같이 배열포인터를 선언하고 메모리 내부를 상상해보자.

 

#include <iostream>

using namespace std;


int main()
{
    
    int arr[3] = {10, 20, 30};
    int (*arr_ptr)[3] = &arr;

   
}

 

 

또한 배열포인터를 사용해서,

 

배열 인덱스에 접근하여 값을 가져오는 방법은 아래와 같다.

 

#include <iostream>

using namespace std;


int main()
{
    
    int arr[3] = {10, 20, 30};
    int (*arr_ptr)[3] = &arr;


    //배열 포인터를 통해서 각 배열 값에 접근하는 방법 1
    for (int i = 0; i < 3; i++) {
        cout << *(*arr_ptr + i) << endl;
    }

    //배열 포인터를 통해서 각 배열 값에 접근하는 방법 2
    for (int i = 0; i < 3; i++) {
        cout << (*arr_ptr)[i] << endl;
    }
   
}
반응형

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

[C++] Mysql select, insert, update, delete  (0) 2023.08.16
[C++] 멀티스레드 프로그래밍  (0) 2023.08.15
[C++] Mac os 에서 Mysql 연결하기  (0) 2023.08.14
[C/C++] 포인터  (0) 2022.06.02
  1. 1. 포인터 배열 (Pointer Array)
  2. 2. 배열 포인터(Array Pointer)
'C,C++' 카테고리의 다른 글
  • [C++] Mysql select, insert, update, delete
  • [C++] 멀티스레드 프로그래밍
  • [C++] Mac os 에서 Mysql 연결하기
  • [C/C++] 포인터
ssh9308
ssh9308
신승환의 기술 블로그
반응형
ssh9308
신승환의 기술 블로그
ssh9308
전체
오늘
어제
  • 분류 전체보기 (203)
    • SQL Basic (11)
    • SQL Tuning (11)
    • DB ARCHITECTURE (21)
    • 컴퓨터 구조 (6)
    • 코딩 테스트 (25)
    • 알고리즘 (5)
    • JAVA (4)
    • 개발 & 구현 (6)
    • C,C++ (5)
    • 면접대비 자료 (1)
    • JS (3)
    • MongoDB (6)
    • Redis (7)
    • 네트워크 (38)
    • bash shell (0)
    • Kafka (2)
    • Elasticsearch (11)
    • Spring (1)
    • SQL SERVER ARCHITECTURE (0)
    • Python (1)
    • RUST (12)
    • 보안 (3)
    • 운영체제 (19)
    • 결혼관련 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 공방301
  • 예물
  • 커플링
  • 고급
  • 종로
  • 웨딩밴드
  • 웨딩링
  • 다이아
  • 가성비

최근 댓글

최근 글

hELLO · Designed By 정상우.
ssh9308
[C,C++] 포인터 배열, 배열 포인터
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.