반응형
배열과 포인터
- 배열명은 자체로 주소 정보도 가진다.
- 예를 들어, 인천공항라는 대표명은 동시에 주소/위치를 나타낸다.
- 배열명은 포인터의 성격을 갖는다.
- 배열명을 마치 포인터 변수와 동일하게 사용한다.
- 단, 포인터 변수는 그 값을 변경할 수 있으나, 배열명의 값을 변경할 수는 없다.
-> 배열명은 포인터 상수라는 표현을 사용
- 단, 포인터 변수는 그 값을 변경할 수 있으나, 배열명의 값을 변경할 수는 없다.
- 포인터 변수가 배열을 가리킬 경우, 증가/감소의 의미한다.
- ++, +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
반응형
'공부 > 자료구조 | 알고리즘' 카테고리의 다른 글
[자료구조] 연결리스트 만들고 출력하기 Linked List (0) | 2019.08.01 |
---|---|
[자료구조] 단순 연결리스트 노드 삽입 (0) | 2019.07.30 |
[자료구조] 단순 연결리스트 (0) | 2019.07.25 |
[자료구조] 동적 메모리 할당 / 반별, 과목별 평균 성적 구하기 예제 (0) | 2019.07.23 |
[자료구조] 배열 / 배열을 이용한 연도 및 분기별 통계 예제 (0) | 2019.07.18 |