TIL 5 | 포인터와 배열의 관계

Yoonsik·2022년 2월 27일
0

C

목록 보기
1/5
post-thumbnail

📄 배열 이름의 포인터 형의 이해

배열의 이름은 포인터이다. 단, 그 값을 바꿀 수 없는 '상수 형태의 포인터' 이다.

포인터 변수와 배열 이름의 비교

  • 포인터
Ex.1
int *ptr;
int num;

ptr = #
ptr = &num2;

포인터는 가리키는 주소값의 변경이 가능한 변수 형태이다.

  • 배열 이름
Ex.2
int arr[3] = {0, 0, 0};

printf("배열의 이름 : %p \n", arr);
printf("배열의 첫 번째 요소의 주소값 : %p \n", &arr[0]);

다음 코드를 컴파일 해보면 배열의 이름과 배열의 첫 번째 요소의 주소값이 동일하다는 것을 알 수 있다.

이것은 배열의 이름은 배열의 첫 번째 요소의 주소값을 가리키는 상수 형태의 포인터(포인터 상수) 라는 것을 의미한다. 즉 배열의 이름은 배열의 시작 주소값을 의미 !

결국 포인터 변수와 배열 이름은 주소값 변경의 가능 여부(상수이냐?, 번수이냐?)에서의 차이가 있을 뿐, 둘 다 포인터라는 점은 같다. (둘 다 이름이 존재 하며, 메모리의 주소값을 저장함)

배열의 이름도 포인터이기 때문에 배열의이름을 피연산자로 하는 * 연산이 가능하다.

배열 이름을 대상으로 하는 * 연산

Ex.3
#include <stdio.h>
int main(void)
{
	int array1[3] = { 1, 2, 3 };
	double array2[3] = { 1.1, 1.2, 1.3 };

	printf("1) %d --- %g \n", *array1, *array2);
	*array1 += 100;
	*array2 += 100;

	printf("2) %d --- %g \n", *array1, *array2);

	return 0;
}

/* 결과 : 
1) 1 --- 1.1
2) 101 --- 101.1
*/
profile
꾸준함의 힘

0개의 댓글

관련 채용 정보