반응형
배열의 이름과 주소
일반적으로 데이터 타입을 뺀 나머지는 변수명이라 할 수 있다.
int i에서 int를 빼면 i가 변수명이다. 그리고 데이터 타입에 *붙여서 선언하면 주소를 담을 수 있는 포인터 변수를 선언 할 수 있다. 그러면 배열을 어떨까?
int x[3] 에서 int[3] 뺀 나머지인 x가 동일하게 변수명이다. 그러면 포인터 변수는 마찬가지로 x 변수에 *만 붙이면 배열의 포인터 주소가 되는 것일까?
대부분 배열의 주소는 첫번째 요소의 주소로 많이 알고 있다. 하지만 배열의 주소와 첫번째 요소의 주소는 같으면서도
다르므로 명확히 구분해서 사용할 필요가 있다.
#include <iostream>
int main()
{
int i = 1;
int *px = &i;
int x[3] = { 1, 2, 3 };
int *p1 = x; // 일반적으로 생각하는 배열의 주소(묵시적으로 첫번째 요소의 주소로 형변환 됨)
int(*p2)[3] = &x; // 정확한 배열의 주소(요소가 모두 포함된 전체 컨테이너의 주소)
// + 1 연산을 하면 기본적으로 데이터 타입 사이즈 만큼 증가된 메모리 주소를 가르침
printf("%p, %p\n", p1, p1 + 1); // 배열의 첫번째 요소의 주소에서 데이터 사이즈인 4바이트 증가
printf("%p, %p\n", p2, p2 + 1); // 요소가 3개인 배열의 주소에서 데이터 사이즈인 12바이트 증가
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 템플릿 클래스 템플릿(Class template) (0) | 2020.12.31 |
---|---|
C++ 템플릿 타입 추론(Argument Decay) (0) | 2019.07.14 |
C++ 템플릿 타입 추론(Template Argument Type Deduction) (0) | 2019.07.14 |
C++ 템플릿 타입 추론(std::typeid, boost::type_index 활용) (0) | 2019.07.14 |
C++ 비주얼스튜디오에서 boost 라이브러리 사용 방법 (0) | 2019.06.30 |