c언어 공부 정리-<배열과 포인터 관계>

hans·2022년 8월 9일
0

c언어 공부 정리

목록 보기
1/2

1.배열과 포인터의 관계

배열은 자료형이 같은 변수를 메모리의 연속적 으로 할당한다
char ary[3]이라는 배열을 선언했다고 가정해 보자

그림을 통해 살펴보자
char형 변수의 크기는 1바이트 라면 각각의 배열 요소의 주소는100,101,102 번지가 된다
배열명 ary는 첫 번째 배열의 요소의 주소 값 이면선 첫 번쨰 배열 요소를 가리킨다
*ary = ary[0] 이고 ary = 100 이다

1-1.배열명으로 배열 요소 사용하기

주소값은 특별한 연산 규칙을 가진다
주소 + 정수 => 주소 + (정수 * 변수의 크기)
코드를 통해 알아보자

int ary[3];
	int i = 0;
	*(ary) = 10;
	*(ary + 1) = 20;
	*(ary + 2) = 30;

	for (i = 0; i < 3; i++)
	{
		printf("%3d", *(ary + i));
	}

실행을 해보면 10 20 30이 정상적으로 출력된다
주소값 연산 규칙을 적용해서 살펴보면 ary 주소값이 100이라 가정한다면
ary +1 => 100(ary 주소값) + 1 4(int의 크기)
따라서 ary + 1 =104로 두번째 배열요소의 주소값을 의미한다
ary[1] (배열 요소 표현식) <=>
(ary +1) (포인터 연산식)은 표현이 다를뿐 같은 뜻을 의미한다

1-2.배열명 역할을 하는 포인터

배열의 이름은 주소값 이므로 포인터를 이용해 저장할수 있다
이를 통해 포인터를 배열처럼 사용할수 있다
코드를 살펴보자

int main(void)
{
	int ary[3];
	int* pary = ary;

	//포인터 연산식
	*(pary) = 10;
	*(pary + 1) = 20;
	*(pary + 2) = 30;

	for (int i = 0; i < 3; i++)
	{
		printf("%d\n", *(pary + i));
	}

	//배열 연산식
	pary[0] = 100;
	pary[1] = 200;
	pary[2] = 300;

	for (int i = 0; i < 3; i++)
	{
		printf("%d\n", pary[i]);
	}


	return 0;
}

실행결과
10 20 30 100 200 300으로 정상으로 출력된다
포인터를 이용해 배열명을 저장하면 포인터는 포인터 연산 혹은 배열 표현식을 이용해 배열요소에 접근할수 있다

1-3.배열명과 포인터의 차이

  • 1.sizeof 연산 값이 다르다
    배열명 사용 => 배열 전체 크기
    포인터 사용 => 포인터 하나의 크기
  • 2.변수와 상수의 차이
    배열명은 상수이고 포인터는 변수다
profile
방구석여포

0개의 댓글

관련 채용 정보