320x100
이번 시간에도 C언어에 대한 학습을 진행합니다.
C언어에서 다양한 자료의 형태 중 Pointer와 배열의 사용에 대해서 알아보겠습니다.
배열은 int array[10]; 과 같이 변수를 선언하는 것과 똑같이 크기와 함께 선언합니다.
포인터의 경우 int *point처럼 변수 앞에 * 을 붙이면서 선언합니다.
이때 배열은 주소처럼 포인터에도 바로 저장할 수 있습니다.
그렇다면 포인터로 연산식이나 대괄호를 써서 배열의 요소를 정의할 수도 있습니다.
#include <stdio.h>
int main(void)
{
int ary[3]; // 배열 선언
int* pa = ary; // 포인터에 배열명 저장
int i; // 반복 제어 변수
*pa = 10; // 첫 번째 배열 요소에 10 대입
*(pa + 1) = 20; // 두 번째 배열 요소에 20 대입
pa[2] = pa[0] + pa[1]; // 대괄호를 써서 pa를 배열명처럼 사용
for (i = 0; i < 3; i++)
{
printf("%5d", pa[i]); // 포인터로 모든 배열 요소 출력
}
return 0;
}
이 경우 포인터 pa로 배열 요소를 사용할 수 있습니다.
배열명과 포인터는 쓰임새는 같다고 봐야 하지만 뜯어보면 몇가지가 다릅니다.
1) 저장된 크기가 다릅니다.
sizeof()를 통해 크기를 구하면, 배열과 포인터의 크기는 상이한데요.
sizeof(array)는 배열 전체의 크기를 보여주지만 sizeof(pa)는 포인터 단 하나의 크기를 확인합니다.
2) 변수와 상수의 차이가 있습니다.
포인터는 값을 바꿀 수 있지만 배열명은 값을 바꿀 수 없습니다.(상수)
아래를 보겠습니다.
pa = pa +1
pa++ // 가능
이 사용은 가능합니다.
array = ary +1
ary ++
하지만 배열의 경우에는 이러한 연산으로 사용은 불가능합니다.
포인터를 사용해서 연산을 하는 것도 가능합니다.
배열을 선언하고, 포인터를 사용해서 뺄셈 연산과 대소비교를 진행해보았습니다.
#include <stdio.h>
int main(void)
{
int ary[5] = { 10, 20, 30, 40, 50 };
int* pa = ary; // 첫번째 배열 요소 주소
int* pb = pa + 3; // 네번째 배열 요소 주소
printf("pa : %u\n", pa); // 주소 배출
printf("pb : %u\n", pb);
pa++; // pa를 다음 배열 요소로 이동
printf("pb - pa : %u\n", pb - pa); // 두 포인터 뺄셈
printf("앞에 있는 배열 요소의 값 출력 : "); // pa가 배열의 앞에 있으면 *pa(포인터)출력
if (pa < pb) printf("%d\n", *pa); // pb가 배열의 앞에 있으면 *pb 출력
else printf("%d\n", *pb);
return 0;
}
728x90
'Programming Language > C' 카테고리의 다른 글
[C언어] 월별로 일수 계산하는 프로그램 (0) | 2023.03.13 |
---|---|
[C언어] 혼공C 예제 연습_1부터 n까지 자동으로 합계내는 알고리즘 (0) | 2023.03.07 |
[C언어] 혼공C 예제 연습_반복문을 활용한 구구단, 교차되는 별 찍기 코드 (0) | 2023.03.05 |
[C언어] 혼공C 예제 연습_Switch문을 활용한 rank별 상금 결정하는 프로그램 (0) | 2023.03.04 |