C - 포인터와 배열
2022. 3. 7. 20:27ㆍC
int num[3] = {1,2,3};
int *ptr = num;
printf("ptr이 가리키는 주소 : %p\n", ptr);
printf("ptr+1 이 가리키는 주소 : %p\n", ptr+1);
printf("ptr+2 이 가리키는 주소 : %p\n", ptr+2);
printf("\n\n");
printf("num[0]이 가리키는 주소 : %p\n", &num[0]);
printf("num[1]이 가리키는 주소 : %p\n", &num[1]);
printf("num[2]이 가리키는 주소 : %p\n", &num[2]);
출력 결과
ptr이 가리키는 주소 : 0x304c7b9ec
ptr+1 이 가리키는 주소 : 0x304c7b9f0
ptr+2 이 가리키는 주소 : 0x304c7b9f4
num[0]이 가리키는 주소 : 0x304c7b9ec
num[1]이 가리키는 주소 : 0x304c7b9f0
num[2]이 가리키는 주소 : 0x304c7b9f4
출력 결과를 보면 배열의 인덱스가 1 증가할때마다 int 자료형 크기인 4만큼 올라가는 것을 확인할 수 있으며
int num[3] = {1,2,3};
int *ptr = num;
printf("ptr이 가리키는 값 : %d\n", *ptr);
printf("ptr+1 이 가리키는 값 : %d\n", *(ptr+1));
printf("ptr+2 이 가리키는 값 : %d\n", *(ptr+2));
printf("\n\n");
printf("num[0]이 가리키는 값 : %d\n", num[0]);
printf("num[1]이 가리키는 값 : %d\n", num[1]);
printf("num[2]이 가리키는 값 : %d\n", num[2]);
ptr이 가리키는 값 : 1
ptr+1 이 가리키는 값 : 2
ptr+2 이 가리키는 값 : 3
num[0]이 가리키는 값 : 1
num[1]이 가리키는 값 : 2
num[2]이 가리키는 값 : 3
배열[i]는 (ptr+i)와 값이 같다는 것을 알 수 있다.
ptr+1 = num1
*(ptr+1)은 ptr+1이 가리키는 주소의 값
<핵심 내용>
포인터는 주소값과 대상이 있어야하며
배열의 이름 == 배열의 시작 주소값
배열의 인덱스가 1씩 증가하면, 주소는 자료형의 크기만큼 증가
배열은 포인터와 같은 연산이 가능
배열의 각 요소값과 주소를 출력하는 프로그램
int aa[5] = {1,2,3,4,5};
int *pt, i;
pt = aa;
for (int i = 0; i < 5; i++) {
printf("aa[%d]의 주소 --- %p", i, &aa[i]);
printf("aa[%d]=%d=%d \n",i, *(pt+i), *(aa+i));
}
출력 결과
aa[0]의 주소 --- 0x309c799e0aa[0]=1=1
aa[1]의 주소 --- 0x309c799e4aa[1]=2=2
aa[2]의 주소 --- 0x309c799e8aa[2]=3=3
aa[3]의 주소 --- 0x309c799ecaa[3]=4=4
aa[4]의 주소 --- 0x309c799f0aa[4]=5=5
포인터를 사용하여 2차원 배열의 각 요소값을 출력하는 프로그램
int aa[3][2] = {1,2,3,4,5,6};
int *pt, i, j, k;
pt = reinterpret_cast<int *>(aa);
k = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j <= 1; j++) {
printf("aa[%d][%d] -- %d \n", i, j, *(pt+k));
k++;
}
}
출력 결과
aa[0][0] -- 1
aa[0][1] -- 2
aa[1][0] -- 3
aa[1][1] -- 4
aa[2][0] -- 5
aa[2][1] -- 6
포인터 배열을 사용해서 각 문자를 출력하는 프로그램
char *ptr[4] ={"SUN","MON","TUE","WED"};
int i, j;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 3; j++) {
printf("*(pt[%d]+%d)--", i, j);
printf("%c ", *(ptr[i]+j));
}
printf("\n");
}
출력 결과
*(pt[0]+0)--S *(pt[0]+1)--U *(pt[0]+2)--N
*(pt[1]+0)--M *(pt[1]+1)--O *(pt[1]+2)--N
*(pt[2]+0)--T *(pt[2]+1)--U *(pt[2]+2)--E
*(pt[3]+0)--W *(pt[3]+1)--E *(pt[3]+2)--D
'C' 카테고리의 다른 글
C - 재귀함수 (0) | 2022.03.07 |
---|---|
C - 함수 (0) | 2022.03.07 |
간단한 제어문 예제 (0) | 2022.03.07 |
C - 전처리기 (0) | 2022.03.07 |
C - getchar() 함수와 gets()함수 (0) | 2022.03.07 |