배열의 이름은 포인터입니다. 단 그값을 바꿀 수 없는 '상수 형태의 포인터'입니다.
들어가기 전에,서식문자 %p 는 주소값의 출력에 사용되는 서식문자입니다.


포인터와 배열의 관계

배열 원소에 접근할때 내부에서 포인터를 사용합니다.
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main (void){
    int arr[3= {0,1,2};
    printf("%p \n",arr);
    printf("%p \n",&arr[0]);
    printf("%p \n",&arr[1]);
    printf("%p \n",&arr[2]);
    
    return 0;
}
출력결과는 다음과 같습니다.
1
2
3
4
000000000062FE40
000000000062FE40
000000000062FE44
000000000062FE48
(해당 결과는 PC마다 다름. 참고용임)
int는 4바이트라서 int형 배열요소간 주소 값의 차는 4바이트입니다.

위에 사진은 할당된 배열의 구조입니다.

배열의 첫 번째 바이트의 주소 값이 0x63FE40인데,배열의이름을 출력한 결과도 이와 같습니다.
배열의 이름은 대입연산자의 피연산자가 될 수 없으므로 (값의 저장 불가능) 다음의 결론을 내립니다. (arr = arr[0])
배열의 이름은 배열의 시작 주소값을 의미하며, 그 형태는 값의 저장이 불가능한 상수인겁니다.
포인터변수와 배열의이름을 비교
비교조건/비교대상
포인터 변수
배열의 이름
이름이 존재하는가?
존재한다
존재한다
무엇을 나타내거나 저장하는가?
메모리의 주소값
메모리의 주소값
지시하는 주소값의 변경이 가능한가?
가능하다
불가능하다.
즉 배열의 이름은 상수형태의 포인터
배열의이름을 포인터 상수 라고 부르기도 합니다.
포인터변수는 가리키는변수를 변경이 가능하지만,배열의이름 (포인터상수)는 가리키는것이 arr[0]으로 고정입니다.

즉 포인터 변수와 배열의이름의 차이점은 변수,상수라는것입니다.





'프로그래밍 > C' 카테고리의 다른 글

포인터 연산  (0) 2019.04.17
C언어 포인터  (0) 2019.04.17
C언어 포인터와 배열의 관계  (0) 2019.03.19
C언어 배열 (1차원만 설명)  (0) 2019.03.19
C언어 재귀함수  (0) 2019.02.24
C언어 변수의 존재기간과 접근범위  (0) 2018.12.20

댓글을 달아 주세요