일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 샤오미 미밴드 7 스마트밴드
- 굿아이템 양면오픈형 투명 접이식 리빙박스 폴딩박스 옷정리함 수납박스 펜트리수납함
- 더블탭스 22SS 정글 01 셔츠 WTAPS JUNGLE 01 GREIGE M
- 올리비아 스텐 세면대 세트
- list #pop #remove #del #append #insert #list형 #파이썬 파이썬 기본 문법 #파이썬 list
- 톰브라운 명품톰브라운 23SS 더블페이스 니트 아우터형 포켓 셔츠 MJT291A 07545 415
- 대림디움 대림바스플랜 PL-3070 탑카운터형 세면대/욕실/화장실/세면도기
- 22FW 로고 패치 포켓 체크 셔츠 2F000 03 M2359 F41
- 오토비 AZ100TR 32G 전후방 FHD 2채널 트럭 화물차 전용 블랙박스 보증기간 2년 20m케이블 포함 후방 적외선 방수 AS 2년보장
- 코멧 접이식 투명 리빙박스 56L 대형 2개입
- 삼성 갤럭시워치5
- 리빙앤트리 펠리컨 박스 대
- 남쪽나무 세면대 세면대 세트 (스마트거울) 벽걸이세면대 이케아세면대 세면기
- 네스파 다야몬드은박 후드티
- 내셔널지오그래픽 피너스 빅로고 라운드넥 긴팔 티셔츠 카본 블랙
- 8052 블랙라인 정사각 세면기
- 긍정
- 1개
- ipTIME 유무선공유기
- 반스 올드스쿨 VN000D3HY28
- 두칸 프릴 오버핏 후드티
- 미네 리빙다이닝 6인 원목 코너형 식탁세트(소파형)
- ChatGPT
- 22FW 이바나 빈티지 체크 셔츠 더스트핑크 8054631
- 잡잡 NBR 요가매트 스탠다드 운동매트 10mm 퍼플
- 위드리빙 대용량 옷 수납 방수 바구니
- 23SS 스트라이프 오버핏 셔츠 723033 V2L30 9066
- 러버메이드 벤티드 브루트(75L) 원형 컨테이너 리빙박스
- 봄봄 골드라인 4023G 탑볼세면대 화이트골드 카운타 도기볼 카페세면대
- [제이앤제나] 허리에 무리없는 신생아부터 역류방지쿠션_앨리펀블루 역류방지쿠션
- Today
- Total
냥집사의 개발일지
C언어 - 배열 포인터 (pointer to an array) 본문
안녕하세요 오늘은 배열 포인터에 대해 정리해보고자 합니다.
1. 배열 포인터 선언
2. 배열 포인터의 활용 방법
배열 포인터에 알아보기 전 주소와 정수 연산에 개념을 먼저 정리해봅시다.
아래 코드는 배열 요소 주소 혹은 배열의 주소가 정수 연산 시 주소 값의 변화를 출력합니다.
#include <stdio.h>
int main(){
int arr[2][3] = {
{1,2,3},
{4,5,6}
};
printf("address of arr\n");
printf("&arr : %u\n", &arr);
printf("&arr + 1 : %u\n\n", &arr + 1);
printf("address of arr[0]\n");
printf("&(arr[0]) : %u\n", &(arr[0])); // arr
printf("&(arr[0]) + 1 : %u\n\n", &(arr[0]) + 1); // arr + 1
printf("address of arr[0][0]\n");
printf("&(arr[0][0]) : %u\n", &(arr[0][0]));
printf("&(arr[0][0]) + 1 : %u\n\n", &(arr[0][0]) + 1);
return 0;
}
&arr : arr 배열의 주소
&arr + 1: arr배열의 주소에 arr배열의 크기 만큼 더한 것과 같습니다 => &arr + (1 * sizeof(arr))
arr는 2행3열의 정수형 배열이므로 크기는 24byte
아래 결과에서 알 수 있듯이 &arr의 주소 값은 480, &arr + 1의 주소 값은 504입니다.
&arr[0] : arr[0] 배열의 주소 (arr와 같습니다!)
&(arr[0]) + 1: arr[0]배열의 주소에 arr[0]배열의 크기만큼 더한 것과 같습니다 => &arr + (1 * sizeof(arr[0]))
arr[0]는 3열의 정수형 배열이므로 크기는 12byte
아래 결과에서 알 수 있듯이 &arr[0]의 주소 값은 480, &(arr[0]) + 1의 주소 값은 492입니다.
&arr[0][0] : arr[0][0] 배열의 주소
&(arr[0][0]) + 1: arr[0][0]배열의 주소에 arr[0][0]배열의 크기만큼 더한 것과 같습니다 => &arr + (1 * sizeof(arr[0][0]))
arr[0][0]는 정수형 변수이므로 크기는 4byte
아래 결과에서 알 수 있듯이 &arr[0][0]의 주소 값은 480, &(arr[0][0]) + 1의 주소 값은 484입니다.
1. 배열 포인터 선언
배열 포인터는 다음과 같이 선언할 수 있다.
자료형 + (간접 참조 연산자 + 포인터 변수) + 배열 연산자
e.x) int (*pt)[3], char (*pt)[5]
#include <stdio.h>
int main(){
int arr[2][3] = {
{1,2,3},
{4,5,6}
};
int (*pt)[3];
pt = arr;
for(int i=0; i<2; i++){
for(int j=0; j<3; j++){
printf("%3d",pt[i][j]);
}
printf("\n");
}
return 0;
}
위의 코드에서 pt라는 배열 포인터를 선언했습니다.
int(*pt)[3]는 정수형 변수 3개의 요소를 가지는 배열을 가리키는 포인터라는 뜻입니다.
arr(배열의 주소)가 pt에 할당되어 pt로 arr의 요소를 접근하고 아래와 같이 정상적으로 출력됨을 확인했습니다.
2. 배열 포인터의 활용 방법
배열 포인터는 2차원 배열의 배열명을 받는 함수의 매개변수로 활용됩니다.
#include <stdio.h>
void print_arr(int (*pt)[3]){
for(int i=0; i<2; i++){
for(int j=0; j<3; j++){
printf("%3d",pt[i][j]);
}
printf("\n");
}
printf("\n");
for(int i=0; i<2; i++){
for(int j=0; j<3; j++){
printf("%3d",*(*(pt + i)) + j);
}
printf("\n");
}
}
int main(){
int arr[2][3] = {
{1,2,3},
{4,5,6}
};
print_arr(arr);
return 0;
}
2행 3열의 정수형 배열 arr가 배열 포인터 pt에 할당되고
배열 표현으로 출력
포인터 표현으로 출력되었습니다.
아래 결과와 같이 정상적으로 배열 포인터를 이용하여 arr요소에 접근한 것을 확인할 수 있습니다.
오늘은 배열 포인터에 대해 정리해보았습니다.
1. 배열 포인터 선언
2. 배열 포인터의 활용 방법
이전 배열이나 포인터 관련 포스팅을 참고하시면 더욱 도움이 될거 같습니다.
좋은 하루 보내세요~~
'C언어' 카테고리의 다른 글
C언어 - void 포인터 (void Pointer) (0) | 2022.09.19 |
---|---|
C언어 - 함수 포인터 (Function Pointer) (0) | 2022.09.18 |
C언어 - 이중 포인터 (Pointer to Pointer) (0) | 2022.09.16 |
C언어 - 포인터 배열(array of pointer) (0) | 2022.09.15 |
C언어 - 다차원 배열(N dimensional array) (0) | 2022.09.14 |