*p (역참조) : p 가 가리키는 주소의 값을 읽음
int x = 42;
int *p = &x
// *p -> 42
p[i] = *(p+i)
p+i 는 p 에서 sizeof(T)*i (칸수로 이동하는 느낌)
p++/p-- 는 다음/이전 원소로 이동 (배열 순회)
p==q / p<q 는 같은 배열내에서 객체 비교할 때 쓰임 (p<q ==1 이면 p 가 앞임)
**p
int *p1
int **p2
int ***p3
*p1 -> int 값
*p2 -> 주소 / **p2 -> int 값
*p3 -> 주소 / **p3 -> 주소 / ***p3 -> int 값
p3(0xC000) → p2(0x9000) → p1(0x5000) → x=42(0x1000). 역참조 * 개수 = 레벨 수
**여기 헷갈림
int *p[3]
//p 는 크기 3짜리 배열이고 각 원소의 타입이 int* 이다.
//int* 를 3개 담는 배열
//p[0] p[1] p[2] 각각이 int* (어딘가를 가리킴)
int (*p)[3]
//p 는 포인터이고 int 3개짜리 배열을 가리킨다
//int[3] 배열 그 자체를 가리킴
//이 상황에서 ++p 를 할 시 3*4 로 12byte 이동 ( 배열의 열 만큼 이동 )
차원별로 배열이 있음 (Array decay 설명)
int a[5];
int a[2][3];
int a[2][3][4];
1차원 배열
int arr[4] = {10,20,30,40};
&arr; //int (*)[4] -> 4칸짜리 배열 전체를 가리킴
arr; //int * -> 첫 번째 원소 가리킴 즉, &arr[0]
arr[0]; //int -> 첫 번째 원소의 값. 10
2차원 배열
int arr[2][3];
&arr; //int(*)[2][3] -> 2*3 배열 그 자체를 가리킴
arr; //int(*)[3] -> 3칸짜리 행 하나 가리킴 == &arr[0]
arr[0]; //int* -> &arr[0][0]
arr[0][0]; //int -> [0][0]에 위치한 요소 하나의 값
//위의 4줄 다 주소는 배열의 시작주소로 같음.
//그러나 타입과 증가 단위가 다르니 주의
//arr + 1 은 한 행 (3칸 이동)
//&arr + 1 은 전체 배열 (6칸 이동)

int (*p3[2])[4]
int (*p3)[2][4]
int(*(p3[2]))[4]
int(*(*p3)[2])[4])
int(*(*p5)[3])[4]
ㅋㅋㅋ
arr[1][2] == (*(arr+1))[2] == *(*(arr+1)+2) == *(arr[1]+2)

약간 이런느낌인듯 하네요!!
선언포인터 변경값 변경암기법
| const int *p | 가능 | 불가 | * 앞에 const → 값 고정 |
| int *const p | 불가 | 가능 | * 뒤에 const → 포인터 고정 |
| const int *const p | 불가 | 불가 | 양쪽 const → 둘 다 고정 |
'학교' 카테고리의 다른 글
| 데이터통신 2주차 공부내용 (1) | 2026.04.23 |
|---|---|
| 데이터통신 1주차 공부내용 (1) | 2026.04.23 |
| 운영체제 CPU , 프로세스 , 프로세서, OS , 프로그래밍, 프로세싱 , 멀티프로그래밍, 타임쉐어링 정리 (2) | 2026.04.02 |
| 2025 SPG F.A.T.I 준비 3 (온라인 레이스 참여) (0) | 2025.08.13 |
| 2025 SPG F.A.T.I 준비 2 (샘플 코드 학습) (2) | 2025.08.13 |