본문 바로가기

C언어/C언어 문법

[C언어] 배열의 주소

728x90
반응형

 

배열의 주소

 

배열의 각 원소는 연속된 주소를 갖고 있다.

 

예를 들어 int 형 배열 arr[3] 를 선언했다고 가정해 보자.

 

int 형 변수는 크기가 4바이트이므로 배열의 한 칸도 4바이트를 차지한다.

 

따라서 arr[0] 의 주소가 00A3FC00라면 arr[1] 의 주소는 00A3FC04 가 되고

arr[2] 의 주소는 00A3FC08 가 되는 것이다.

 

 

 

이를 그림으로 확인해 보면 다음과 같다.

 

 

 

 

 

 

 

 

 

double 형 변수는 크기가 8바이트이므로 arr[3] 을 double 형 으로 선언했다면 다음과 같은 주소를 갖는다.

 

 

 

 

 

 

 

 

 

 

다차원 배열의 경우도 마찬가지로 모든 변수의 주소는 연속적이다.

 

그림으로 표현하자면 다음과 같다.

 

 

 

 

 

위 내용은 아래 코드로도 확인할 수 있다.

 

 

#include <stdio.h>

int main()
{
	int arr[2][3] = { 0, };
	printf("%p\n%p\n%p\n", &arr[0][0], &arr[0][1], &arr[0][2]);
	printf("%p\n%p\n%p\n", &arr[1][0], &arr[1][1], &arr[1][2]);
	return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

배열의 이름과 주소

 

배열의 이름은 주소값을 나타낸다.

 

배열의 이름을 아래 코드로 출력해 보면 주소값을 출력한 것과 같은 값이 나오는 것을 확인할 수 있다.

 

#include <stdio.h>

int main()
{
	int arr[2][3] = { 0, };
	printf("%p\n%p\n%p\n", &arr[0][0], &arr, arr);
	return 0;
}

 

 

 

 

확인을 해보면 세 가지 모두 같은 값이 출력되는 것을 알 수 있다.

 

따라서 scanf 로 입력을 받을 때에도 &arr[0][0] 대신에 arr 만을 사용할 수 있다.

 

앞선 포스팅에서 %s 로 문자열을 입력받을 때 & 를 사용하지 않아도 된다고 하였는데 그 이유가 이것이다.

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형