배열 포인터

2024. 4. 8. 18:33정보처리,전산/Clang

반응형
#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int ptr;

    // 배열 포인터로 형변환
    ptr = (int )arr;

    // 배열을 포인터로 접근하여 요소 출력
    for (int i = 0; i < 5; i++) {
        printf("%d ", (ptr + i));
    }

    return 0;
}

 

 

 

 

 

2차원 배열 포인터

 

 

#include <stdio.h>

int main() {
    int arr[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    int (ptr)[3]; // 포인터를 배열의 행을 가리키도록 선언

    ptr = (int ()[3])arr; // 2차원 배열을 가리키는 포인터로 형변환

    // 배열을 포인터로 접근하여 요소 출력
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", ((ptr + i) + j));
        }
        printf("\n");
    }

    return 0;
}

이 예제에서는 3x3 크기의 2차원 배열 arr을 선언하고 ptr이라는 포인터를 선언한다.

ptr은 각각의 행을 가리키는 포인터이다.

 

 

`int (*ptr)[3];`는 "3개의 정수로 이루어진 배열을 가리키는 포인터"를 선언하는 것이다.

그리고 배열 arr을 가리키는 포인터로 형변환하여 ptr에 저장한다. 

`ptr`은 2차원 배열의 각 행을 가리킬 수 있는 포인터가 된다.

 


`ptr = (int (*)[3])arr;`에서의 형변환은 `arr`을 `int (*)[3]` 형태의 포인터로 형변환하여 `ptr`에 할당하는 것이다. 

 

`(int (*)[3])arr;`은 `arr`이라는 변수를 `int (*)[3]` 타입으로 형변환하는 것을 의미한다.


- `arr`: 2차원 배열의 이름이며, 이는 배열의 첫 번째 요소를 가리키는 포인터로 해석 
- `(int (*)[3])`: 이 부분은 형변환 연산자로 특정한 형식으로 `arr`을 형변환하여 행이 3개의 `int` 요소로 이루어진 배열을 가리키는 포인터이며 `int (*)[3]` 형식으로 형변환하겠다는 것을 의미한다. 이러한 형변환을 통해 해당 포인터를 사용하여 2차원 배열의 각 행에 접근할 수 있게 된다.

 

 

따라서 `ptr`이 `arr`의 각 행을 가리킬 수 있으며 `ptr`을 사용하여 2차원 배열 `arr`의 각 행에 접근하고 요소에 접근할 수 있다. 

 

- `ptr + 1`: `ptr`이 가리키는 위치에서 한 칸 아래로 이동한 곳에 있는 포인터를 나타낸다. 

여기서 한 칸은 `arr`의 두 번째 행이다.


- `*(ptr + 1)`: `ptr`이 가리키는 위치에서 한 칸 아래로 이동한 곳에 있는 포인터이므로, 두 번째 행의 시작 주소를 나타낸다.
- `*(ptr + 1) + 2`: 두 번째 행의 시작 주소에서 두 칸 더 이동한 곳에 있는 포인터를 나타낸다. 여기서 두 칸은 두 번째 행에서 세 번째 요소를 가리킨다.
- `*(*(ptr + 1) + 2)`: `*(ptr + 1) + 2`가 가리키는 위치에 있는 값을 역참조하여 가져오는 것이므로, 두 번째 행에서 세 번째 요소의 값을 의미한다.

따라서 `*(*(ptr + 1) + 2)`는 `arr`의 두 번째 행에서 세 번째 요소의 값인 6이 된다.

 

 

반응형

'정보처리,전산 > Clang' 카테고리의 다른 글

비트연산  (0) 2024.06.22
call by reference  (0) 2024.06.16
랜덤 숫자 발생 후 입력 값 존재 유무 찾기  (0) 2024.05.29
최빈값 구하기  (0) 2024.05.16
(함수의 구조, 선언) 1~100까지의 합, 구구단  (0) 2024.03.31