본문 바로가기

공부/자료구조 | 알고리즘

[자료구조] 배열과 포인터 / 2차원 배열과 포인터 예제

반응형
배열과 포인터
  • 배열명은 자체로 주소 정보도 가진다.

    • 예를 들어, 인천공항라는 대표명은 동시에 주소/위치를 나타낸다.
    • 배열명은 포인터의 성격을 갖는다.
  • 배열명을 마치 포인터 변수와 동일하게 사용한다.

    • 단, 포인터 변수는 그 값을 변경할 수 있으나, 배열명의 값을 변경할 수는 없다.
      -> 배열명은 포인터 상수라는 표현을 사용
  • 포인터 변수가 배열을 가리킬 경우, 증가/감소의 의미한다.

    • ++, +1 연산의 의미 : 다음 원소
    • --, -1 연산의 의미 : 이전 원소
  • 배열명은 그 자체로 배열의 시작 주소를 의미한다.

    • 배열명‘&배열명’, 그리고 ‘&배열첫원소 모두 동일한 주소값
    • 배열 내 원소들은 연속된 기억장소를 차지한다.

 

2차원 배열과 포인터
  • 배열명은 자체로 주소 정보도 가진다.

    • 배열명은 포인터의 포인터(이중 포인터) 성격을 갖는다.
  • 배열명을 마치 이중 포인터 변수와 동일하게 사용한다.

    • 배열명을 수정하는 작업은 허용되지 않음
    • 배열명은 포인터 상수라는 표현은 그대로
  • 일반적으로 배열명이나 포인터 변수에 * 연산이나 [] 기호를 붙이면 원소값을 의미하나,
    이중 포인터 성격의 배열명/포인터에는 * 연산이나 [] 기호가 2개 붙어야 원소를 의미하게 된다.
     
    • score[1] 주소, *score[1]원소값을 의미
  • 예를 들어 score[3][4]의 경우, 4개짜리 배열이 3개 있는 것으로 해석된다.

    • score[0]의 경우, 첫번째 행을 나타내는 배열명으로 인식
    • score[1]의 경우, 두번째 행을 나타내는 배열명으로 인식
    • 따라서 score, &score, score[0], score[1], score[2], score[3] 모두 주소값을 출력함 ->  1차원 배열과과 다름 
    • 1차원 배열 : *(array + i) == array[i] 모두 원소 값 
    •  2차원 배열 : *(array + i) == array[i] 모두 주소 값 
#include <iostream>
using namespace std;

int main() {
    int score[3][4];
    cout << score << ":" << &score << ":" << *score << endl;
    cout << score[0] << ":" << &score[0] << ":" << *score[0] << endl;
    cout << score[1] << ":" << &score[1] << ":" << *score[1] << endl;
    cout << score[2] << ":" << &score[2] << ":" << *score[2] << endl;
    cout << *score << ":" << *(score + 1) << ":" << *(score + 2) << endl;
    
}
0x7ffeefbff570:0x7ffeefbff570:0x7ffeefbff570
0x7ffeefbff570:0x7ffeefbff570:1
0x7ffeefbff580:0x7ffeefbff580:0
0x7ffeefbff590:0x7ffeefbff590:0
0x7ffeefbff570:0x7ffeefbff580:0x7ffeefbff590
반응형