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

#include <stdio.h>

int main(void)
{
    int arr[] = {0,1,2};
    printf("배열의 이름 : %p\n", arr);
    printf("첫 번째 요소 : %p\n",&arr[0]);
    printf("두 번째 요소 : %p\n",&arr[1]);
    printf("세 번째 요소 : %p\n",&arr[2]);
    return 0;
}
/* output : 
배열의 이름 : 0061FF14
첫 번째 요소 : 0061FF14
두 번째 요소 : 0061FF18
세 번째 요소 : 0061FF1C
*/

int형 배열의 요소간 주소 값의 차는 4바이트 인것을 확인할 수 있다. 또한 모든 배열 요소는 메모리 공간에 나란히 할당됨을 알 수 있다. 배열의 이름은 배열의 시작 주소 값을 의미하고, 그 형태는 값의 저장이 불가한 상수이다. 

 

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

#include <stdio.h>

int main(void)
{
    int arr1[] = {1,2,3};
    double arr2[] = {1.1,2.2,3.3};

    printf("%d %g\n", *arr1, *arr2);
    *arr1 += 100;
    *arr2 += 120.5;
    printf("%d %g\n", *arr1, *arr2);
    return 0;
}
/* output: 
1 1.1
101 121.6
*/

배열의 이름이 가리키는 것은 배열의 첫번째 요소이기 때문에 배열의 이름을 대상으로 *연산을 하면 배열의 첫번째 요소에 접근된다.

 

#include <stdio.h>

int main(void)
{
    int arr[] = {10,20,30};
    int *ptr = &arr[0];

    printf("%d %d\n", ptr[0], arr[0]);
    printf("%d %d\n", ptr[1], arr[1]);
    printf("%d %d\n", ptr[2], arr[2]);
    return 0;
}
/* output : 
10 10
20 20
30 30
*/

위 코드와 같이 포인터를 배열의 이름처럼 사용할 수도 있다.

'Language > C, C++' 카테고리의 다른 글

[C] 문자열 포인터  (0) 2020.12.18
[C] 포인터 연산  (0) 2020.12.17
[C] 포인터 변수  (0) 2020.12.16
[C] 1차원 배열(2)  (0) 2020.12.14
[C] 1차원 배열(1)  (0) 2020.12.12

변수는 메모리 상에 저장되고, 포인터 변수는 메모리의 주소값을 저장하기 위한 변수이다.

#include <stdio.h>

int main(void)
{
    int num = 9;
    int *pNum;      // 포인터 변수 pNum 선언
    pNum = &num;    // pNum에 num의 주소값 저장

    printf("%d\n", pNum);   // 메모리 주소 출력
    printf("%d\n", *pNum);  // 메모리 주소에 저장된 값 출력

    *pNum = 20;     // pNum이 가리키는 주소에 저장된 값을 20으로 변경
    printf("%d\n", num);
    return 0;
}
/* output : 
6422296
9
20
*/

*으로 포인터 변수를 선언할 수 있고, &연산자는 피연산자의 주소값을 반환하는 연산자이다. &연산자의 피연산자는 변수여야 한다. 

*연산자는 포인터가 가리키는 메모리 공간에 접근할 때 사용하는 연산자이다. 

 

포인터 변수의 크기는 32비트 시스템에서는 주소값을 32비트로 표현하기에 4바이트이고, 64비트 시스템에선 주소값을 64비트로 표현하기 때문에 8바이트다.

'Language > C, C++' 카테고리의 다른 글

[C] 포인터 연산  (0) 2020.12.17
[C] 포인터와 배열  (0) 2020.12.17
[C] 1차원 배열(2)  (0) 2020.12.14
[C] 1차원 배열(1)  (0) 2020.12.12
[C] 재귀함수  (0) 2020.12.10

+ Recent posts