들어가며
내일 금요일이 광복절 공휴일이라 이번 주차는 평일 4일로 수업이 마감되었다.
ㅤ
주말간에 못들었던 강의도 좀 듣고 온더무드 개발도 빨리 진도를 빼고싶은데, 뭔가 놀고싶은 관성이 자꾸 올라오고있다. 동기가 부족한건지 아니면 실천력이 부족한건지… ㅋㅋㅋ
ㅤ
발은 좀 호전이 되고있다. 지금 거의 5일째 파스를 붙여두고 있어서 진통 효과가 올라온건진 모르겠지만, 다음주에 한 번 설렁설렁 운동 나가보고 어떤지 체크 + 센터 출발 시간 등도 한 번 체크해볼 예정이다. 후,,, 운동은 빼먹을 수 없지.
오늘의 키워드
포인터 장난질이 본격적으로 시작되었다. 생각보다 내가 모르고 있던 것들도 많더라. (중요하게 안짚고 넘어가서 그런지, 아니면 7년이 지나서 그런지)

배열 이름에 & 붙이기
ㅤ
배열명(포인터 상수)에 &를 붙이면 가리키는 주소는 같지만, 가리키는 대상이 달라진다.
char arr[80] = "hello";
printf("%d\\n", arr);
printf("%d\\n", &arr);
// >>> 실행 결과
// arr, &arr 이 같은 주소를 가지고 있음
11532080
11532080
printf("%d\\n", sizeof(arr)); // 배열자체를 가리키는 포인터 (포인터상수)
printf("%d\\n", sizeof(&arr)); // 배열 시작 주소를 가지는 포인터
printf("%d\\n", sizeof(*&arr)); // 다시 배열 가리킴
printf("%d\\n", sizeof(**&arr)); // char 가리킴
// >>> 실행 결과
// &arr는 배열 전체를 가리키는 포인터임 (&arr + 1이 2번째 원소를 가리킴) = 배열포인터
// 그러나 arr는 배열을 가리키고 있어 사이즈가 배열 전체임 (arr+1 이 다음 배열을 가리킴)
80
4
80
1
ㅤ
뭔가 동작이 내가 생각했던 것이랑 다른 것 같아서, 직접 +1을 한 값들을 한 번 찍어봤다.
ㅤ
sizeof(arr)
- arr의 크기는 배열의 크기
- arr&의 크기는 배열을 가리키는 포인터의 크기
arr 포인터 연산
- arr+1 : arr 주소에 원소의 크기만큼 증가
- &arr+1 : arr 주소에 배열의 크기만큼 증가
int arr[80] = { 1, 2, 3 };
printf("arr %d\\n", arr);
printf("arr+1 %d\\n", arr+1);
printf("*arr %d\\n", *arr);
printf("*arr+1 %d\\n", *arr+1);
printf("&arr %d\\n", &arr);
printf("&arr+1 %d\\n", &arr+1);
printf("*&arr+1 %d\\n", *&arr+1);
// >>> 실행 결과
// 주소에 더하기 연산 시 원소타입의 크기만큼 증가
arr 19920932
arr+1 19920936
// 값 접근 시 원소에서 증가
*arr 1
*arr+1 2
// 배열의 주소에 더하기 연산 시 배열의 크기만큼 증가
&arr 19920932
&arr+1 19921252
// 배열의 주소에 있는 값에 더하기 == arr+1
*&arr+1 19920936
sizeof 랑 배열포인터가 정 반대의 동작을 하니, 주의하기!
ㅤ
그렇게 이걸 알아내려고 근 3시간동안 뚝딱대며 노력하고 있었는데, 강사님이 지금에서야 이야기를 해준다….
배열의 이름은 딱 2가지 경우에만 첫 요소를 가리키는 포인터가 아닌 배열로서 동작한다. 요건 외워줄 것…
- sizeof(배열명) ⇒ 배열의크기
- &배열명 ⇒ 배열자체를 가리키는 포인터
ㅤ
코테 준비에 도움되기
// 파일을 열어서, 읽어온 내용을 stdin으로 변환해 사용하기
// txt에 데이터를 넣어두면 이걸 입력으로 받도록 할 수 있음.
freopen("input.txt", "r", stdin);
// 반대로, 이렇게 하면 stdout으로 나가는 출력을 파일에 작성할 수 있음.
// 프로젝트 파일에 바로 추가가 되지는 않으니, 프로젝트 폴더 찾아가서 열어봐야함.
freopen("output.txt", "w", stdout);
위 코드를 main 안에 넣어주면 콘솔을 통한 입출력을 파일을 통한 입출력으로 변경할 수 있음. 코테 로컬환경에서 작성하면서 만약에 입출력이 많으면 이 방법으로 수월하게 처리할 수 있음!
ㅤ
함수 이름도 포인터
함수 이름도 배열이름처럼 포인터다. 함수의 주소를 파라미터로 넘기거나 포인터 변수처럼 다룰 수 있다.
고수준 언어에서 함수의 파라미터로 다른 함수를 넘기듯이 활용하면 유용할 것 같다!
뭔가 설계 테크닉적으로 자주 나올 것 같아서, 조금 익숙해질 필요가 있을 것 같다.
개고생

이걸 정확하게 분석하는 방법을 좀 연구해봐야할 것 같음! 어렴풋이 감은 잡았는데, 정확도를 높이는 연습을 하자.

'TIL' 카테고리의 다른 글
| [250819] Day 9 - 개인교사 데뷔전 (0) | 2025.08.20 |
|---|---|
| [250818] Day 8 - 알고리즘 재활치료 시작 (3) | 2025.08.18 |
| [250813] Day 3 - 날씨 최고로 좋다~ (3) | 2025.08.13 |
| [250812] Day 2 - 익숙해질듯 한 2일차 (4) | 2025.08.12 |
| [250811] Day 1 - 텔레칩스 임베디드 스쿨 ON / C언어 포인터 (2) | 2025.08.11 |