-
[C언어] 포인터 _ 1차원 배열 완벽 정리도쿄/개발 2023. 1. 31. 16:41
C언어 2강. 1차원 배열
핵심 : 배열의 이름은 그 배열의 시작 주소이다.
그러므로 포인터 p는 배열의 시작주소 arr을 값으로 담을 수 있다.
int arr[7] = {1,2,3,4,5,6,7}; //배열의 이름 arr은 포인터이다. int *p; //포인터 p 선언 p = arr; //p[0] == arr[0] printf("p[0] : %d, arr[0] : %d", p[0], arr[0]); printf("p의 주소 : %ul, arr의 주소 : %ul", p, arr);
결과 :
p[0] : 1, arr[0] : 1 p의 주소 : 13927135812l, arr의 주소 : 13927135812l
간단한 그림으로 표현하자면 다음과 같다.
① 배열 선언 arr[7] = {1,2,3,4,5,6,7};
1 2 3 4 5 6 7 arr[0] arr[1] arr[2] arr[3] arr[4] arr[5] arr[6]
*(arr+0) *(arr+1) *(arr+2) *(arr+3) *(arr+4) *(arr+5) *(arr+6)
for(int i = 0; i < 7; ++i){ printf("%d, %d", arr[i], *(arr+i)); }
결과 :
1, 1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7
JAVA나 Javascript로 배열을 배워서 arr[0]은 익숙해도 *(arr+0)이 이해하기 어렵다면 다음과 같이 풀어서 생각해보면 좋다.
*(arr+0) : arr+0이 가리키는(*) 값
② 포인터 p선언 int *p;
p
p라는 포인터 변수의 공간이 만들어졌다.
③ 포인터 p에 배열 arr의 첫 번째 값을 가리키는 주소 대입 p = arr; 또는 p = arr+0;
&arr p
포인터는 주소를 저장하는 변수이고, 포인터 p에 arr변수의 첫 번째 값을 저장했다면 다음과 같은 일이 벌어진다.
1 2 3 4 5 6 7 arr[0] arr[1] arr[2] arr[3] arr[4] arr[5] arr[6]
p[0] p[1] p[2] p[3] p[4] p[5] p[6]
*(arr+0) *(arr+1) *(arr+2) *(arr+3) *(arr+4) *(arr+5) *(arr+6)
*(p+0) *(p+1) *(p+2) *(p+3) *(p+4) *(p+5) *(p+6)
즉,
arr[0] == p[0] == *(arr) == *(arr+0) == *(p+0) == 1
arr[1] == p[1] == *(arr+1) == *(p+1) == 2
arr[2] == p[2] == *(arr+2) == *(p+2) == 3
반응형'도쿄 > 개발' 카테고리의 다른 글
React기초 정리 (0) 2023.10.21 React_기초 정리 1편 (useState, modal, sort 메소드, like 구현) (0) 2023.10.20 [C언어] 포인터_call by value, call by address의 원리와 차이 (0) 2023.01.31