본문 바로가기
ProgramingLagnuage/C

[C언어] 포인터, 메모리 관리, 구조체 완벽 복습

by TSpoons 2024. 11. 1.

포인터(pointer)

가리키는(point) + 사람(er)이라는 개념이고, 또 하나의 변수라고 생각하면 된다.(변수를 가리키는 변수)
ex) 이중 포인터 : 가리키는 사람을 가리키는 사람

   n중 포인터 : 가리키는 사람을 가리키는 사람을 가리키는 사람을 가리키는 사람 ... 사람

 
포인터 사용

 
널 포인터
- 아무것도 가리키지 않는 포인터

int* ptr = NULL;
int a = *ptr; // Error

 
 

배열과 포인터의 관계

```c
int arr[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
```

1. arr + 1의 경우
   - 포인터 타입: int (*)[3] (3개의 int를 가진 배열을 가리키는 포인터)
   - 증가량: 12바이트 (4바이트 * 3)
   - 의미: 다음 행의 시작 주소로 이동
   - 이동: 첫 번째 행에서 두 번째 행으로

2. &arr + 1의 경우
   - 포인터 타입: int (*)[3][3] (3x3 배열 전체를 가리키는 포인터)
   - 증가량: 36바이트 (4바이트 * 9)
   - 의미: 현재 배열 전체를 건너뛴 위치로 이동
   - 이동: 현재 배열의 마지막 요소 다음 위치로

핵심 차이점은 arr은 행을 가리키는 포인터이고, &arr은 배열 전체를 가리키는 포인터라는 점입니다.

https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.log2base2.com%2FC%2Fpointer%2F2d-array-and-pointers-in-c.html&psig=AOvVaw3hzQz0uRrOjXUFS5egcGHX&ust=1730507383177000&source=images&cd=vfe&opi=89978449&ved=0CAMQjB1qFwoTCLjDzcHwuYkDFQAAAAAdAAAAABAJ

 

 

 

구조체

- 단순 데이터 덩어리
- 멤버 변수의 메모리 크기의 총합만큼 메모리를 차지한다.

'ProgramingLagnuage > C' 카테고리의 다른 글

[c언어] - 테트리스 게임 설계  (7) 2024.08.30
memcpy or 대입을 통한 데이터 복사  (0) 2024.08.27