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
반응형
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] 동적할당 (stdlib.h, malloc, free) (0) | 2024.02.12 |
---|---|
[C언어] 포인터 연산 (2) | 2024.02.12 |
[C언어] 포인터 (단일, 다중포인터, 주소값, 참조와 역참조, 포인터배열) (0) | 2024.02.11 |
[C언어] 2차원배열, 다차원배열 (0) | 2024.02.11 |
[C언어] 배열 (0) | 2024.02.11 |