| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 1일1코테
- 자바스크립트
- 데이터베이스
- 99클럽
- 코딩테스트
- 코테공부
- til
- Java
- 자바
- #코드트리 #코딩테스트 #코테공부 #백트래킹 #알고리즘 기초
- 티스토리챌린지
- 인접 행렬
- 자료구조
- 플로이드-워셜
- 개발자루틴
- 알고리즘
- 개발자취업
- 연결 리스트
- 코딩테스트사이트추천
- 항해99
- 오블완
- 운영체제
- 코딩테스트준비
- C
- 파이썬
- 코드트리
- 프로그래머스
- 갭체크
- 프로그래밍 언어
- 웹
- Today
- Total
와드의 블로그
15. 배열과 포인터 본문
(1) 배열과 포인터 표기법
* 배열 표기법과 포인터 표기법의 관계
배열은 [] 연산자를 사용하여 표현하고 포인터는 * 연산자를 사용하여 나타낸다. 포인터는 포인터 변수가 가리키는 메모리의 시작 주소를 기준으로 삼고, 배열도 해당 배열이 사용하는 메모리 그룹의 시작 주소를 기준으로 삼는다. 따라서 두 문법은 표기만 다를 뿐 비슷한 문법이다. 그래서 배열과 포인터는 표기법을 서로 바꿔 쓸 수 있다.
char data[5]
data[1] = 5; // 둘은 같은 동작을 한다.
*(data + 1) = 5;
char data;
char* p = &data;
*p = 3; // 둘은 같은 동작을 한다.
p[0] = 3;
(2) 배열 시작 주소
* 배열 변수의 이름은 배열의 시작 주소
포인터는 일반 변수의 주소만 가질 수 있는 것이 아니라 배열과 같이 그룹으로 묶인 메모리의 주소도 가질 수 있다.
char* p = &data[0];
char* p = &*(data + 0);
char* p = &*data;
char* p = data
위 네 가지 동작은 모두 같기 때문에 &data[0]과 data가 같다. 따라서 배열 변수의 이름은 배열의 시작 주소이다.
* 배열은 포인터가 아니다.
배열이 포인터처럼 작동한다고 해서 완벽하게 포인터가 될 수는 없다. 포인터는 다른 변수의 주소를 저장할 수 있지만 배열 이름은 상수화된 주소이기 때문에 변경할 수 없다.
(3) 배열을 사용하는 포인터
* 포인터로 배열의 주소를 저장하여 사용하기
int data[5] = { 1,2,3,4,5 };
sum = 0, select = 2;
int* p = data + select;
for(int i = 0; i <10; i++)
sum += *p;
(4) 배열과 포인터의 합체
* 배열을 기준으로 포인터와 합체하기
포인터 변수가 여러 개 필요할 때 포인터 변수도 배열로 선언해서 사용할 수 있다.
char data1, data2, data3, data4, data5;
char* p[5] = { &data1, &data2, &data3, &data4, &data5 };
for(int i = 1; i <= 5; i++)
*p[i] = i;
* 포인터를 기준으로 배열과 합체하기
char (*p)[5]와 같이 선언하면 배열과 포인터가 결합되는 것인데, 포인터 문법에 괄호를 사용했기 때문에 포인터가 기준이 된다. p변수는 요소가 5개인 char 형의 배열을 가리키는 포인터 변수이다. 이러한 형태의 사용은 2차원 배열을 나타낼 때 주로 사용한다.
char data[3][5];
char (*p)[5];
p = data;
(*p)[1] = 3 // p[0][1]과 같다.
(*(p+2))[4] = 5; // p[2][4]와 같다.
참조자료: C언어 입문
'프로그래밍 언어 > C' 카테고리의 다른 글
| 17. 다차원 포인터 (0) | 2021.09.17 |
|---|---|
| 16. 메모리 할당 (0) | 2021.09.17 |
| 14. 표준 입력 함수 (0) | 2021.09.16 |
| 13. 포인터 (0) | 2021.09.16 |
| 12. 배열과 문자열 (0) | 2021.09.14 |