[C/C++] 포인터와 배열의 관계

2021. 8. 8. 21:08·프로그래밍 Programming

혼자 끄적이는 포인터와 배열에 대한 관계에 대한 글입니다.

정식된 내용은 책이나 다른 자료를 참고하세요.

 

1. 배열 이름은 무엇을 가리키는가?

정수 배열 int a[3]이 있을 때

a를 출력하면 a[0]을 가리키는 주소값으로 리턴한다.

a는 a[0]에 대한 포인터처럼 사용되는 것이다.

 

 

2. 배열 이름은 포인터와 똑같은가?

 

그러면 배열 이름인 a와 포인터와 동일시해도 되는 것인지 의문이 든다.

 

하지만 배열 이름 a와 일반 포인터 int *p (p는 임의로 정한 것)와는 차이가 있다.

포인터를 ++연산자를 사용했을 때 포인터가 가리키는 타입이 차지하는 메모리 바이트만큼 포인터가 가리키는 주소값 + 메모리 바이트 수(int는 4바이트 등)로 리턴하는데

배열 이름 a는 a++처럼 사용해도 a 자체는 고정된 주소값이라 ++연산을 해도 소용이 없다.

심지어 (&a[0])++로 표현해도 &a[0]이 변경되지 않는 값이라해서 error가 뜬다.

 

즉, ++연산자를 사려면 &a[0] 또는 a 값을 포인터 변수에 넣고 연산을 해야한다.

 

 

 

3. 배열과 포인터의 차이점

 

배열 이름 a가 첫번째 원소를 가리키는 포인터처럼 사용되는 경우가 많지만, 예외적인 경우는 sizeof 와 주소값 연산자 &를 사용할 때다.

sizeof(a)는 배열 a가 차지하는 메모리 양을 리턴 (포인터라면 포인터가 차지하는 메모리 양을 리턴하지만 배열 a는 메모리를 차지하지 않기 때문에 a라는 이름 하에 저장되어있는 값들의 메모리 양을 리턴함)

 

&a는 배열을 가리키는 포인터에 대입할 때 사용한다.

예를 들면

int a[3] = {1,2,3};
int (*pointer)[3] = &a

이런 식으로 pointer 변수는 정수 3개로 이루어진 배열을 가리키기 위한 pointer가 된다.

 

만약 괄호없이 int *pointer[3]으로 하면 int를 가리키는 포인터로 구성된 배열이 된다.

저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 Programming' 카테고리의 다른 글

[프로그래밍] MPI를 windows에서 사용하는 방법  (0) 2022.07.26
[매트랩MATLAB] Symbolic expression에서 미분 및 적분 수행  (0) 2022.07.02
Git bash 명령어 정리 (5) 협업을 위한 관리  (0) 2021.07.20
Git bash 명령어 정리 (4) 깃허브  (0) 2021.07.20
Git bash 명령어 정리 (3) 브랜치  (0) 2021.07.20
'프로그래밍 Programming' 카테고리의 다른 글
  • [프로그래밍] MPI를 windows에서 사용하는 방법
  • [매트랩MATLAB] Symbolic expression에서 미분 및 적분 수행
  • Git bash 명령어 정리 (5) 협업을 위한 관리
  • Git bash 명령어 정리 (4) 깃허브
보통의공대생
보통의공대생
수학,프로그래밍,기계항공우주 등 공부하는 기록들을 남깁니다.
  • 보통의공대생
    뛰는 놈 위에 나는 공대생
    보통의공대생
  • 전체
    오늘
    어제
    • 분류 전체보기 (470)
      • 공지 (1)
      • 영어 공부 English Study (40)
        • 텝스 TEPS (7)
        • 글 Article (21)
        • 영상 Video (10)
      • 연구 Research (99)
        • 최적화 Optimization (3)
        • 데이터과학 Data Science (7)
        • 인공지능 Artificial Intelligent (40)
        • 제어 Control (45)
      • 프로그래밍 Programming (103)
        • 매트랩 MATLAB (25)
        • 파이썬 Python (33)
        • 줄리아 Julia (2)
        • C++ (3)
        • 리눅스 우분투 Ubuntu (6)
      • 항공우주 Aeronautical engineeri.. (21)
        • 항법 Navigation (0)
        • 유도 Guidance (0)
      • 기계공학 Mechanical engineering (13)
        • 열역학 Thermodynamics (0)
        • 고체역학 Statics & Solid mechan.. (10)
        • 동역학 Dynamics (1)
        • 유체역학 Fluid Dynamics (0)
      • 수학 Mathematics (34)
        • 선형대수학 Linear Algebra (18)
        • 미분방정식 Differential Equation (3)
        • 확률및통계 Probability & Sta.. (2)
        • 미적분학 Calculus (1)
        • 복소해석학 Complex Analysis (5)
        • 실해석학 Real Analysis (0)
      • 수치해석 Numerical Analysis (28)
      • 확률 및 랜덤프로세스 Random process (2)
      • 추론 & 추정 이론 Estimation (3)
      • 기타 (26)
        • 설계 프로젝트 System Design (8)
        • 논문작성 Writing (56)
        • 세미나 Seminar (2)
        • 생산성 Productivity (3)
      • 실험 Experiment (1)
      • 유학 생활 Daily (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
    옵시디언
    ChatGPT
    WOX
    obsidian
    Julia
    Zotero
    IEEE
    Dear abby
    MATLAB
    고체역학
    인공지능
    JAX
    논문작성
    에러기록
    논문작성법
    생산성
    딥러닝
    우분투
    Numerical Analysis
    텝스
    Linear algebra
    LaTeX
    matplotlib
    텝스공부
    teps
    pytorch
    수치해석
    서버
    Statics
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
보통의공대생
[C/C++] 포인터와 배열의 관계
상단으로

티스토리툴바