답글 감사합니다. 예 말씀주신대로, prev값이 null 인 경우는 search의 상위노드가 Null, 즉 search가 head인 경우로 이해하고 있습니다. 다만 강의 중 말씀에서는, prev값이 null 일때 prev가 head라고 말씀하신 부분에서 혼동이 생겼습니다. prev가 head 라는건 search가 head의 다음 노드라는 뜻이니까요!
답변 감사드립니다. 이전 질문에서 말씀해주신 c와 h를 나누는 이유는 이해가 됐습니다. 음... 답변에서 c파일에서 include를 안하면 header파일에서 모른다고 하신 부분이 제가 테스트를 해봤을때는 왜 되는걸까요? ㅠㅠ #include void test() { printf("didn't include\n"); } void test(); 위 두 파일로 lib을 만들고, 아예 다른 프로젝트에서 불러와보았습니다. #include #include int main() { test(); return 0; } 했을때, 라이브러리의 c파일에서 header를 Include 하지 않았음에도 test함수가 잘 실행이 되더라구요,,,,, 왜 그런 것일까요?
아아 감사합니다! 제가 혼동이 되었던 부분은 그림1 (빨강색)의 pf가 가르키는 공간이 stack인지 heap인지 몰랐어서 질문을 드렸던 부분입니다! 1. malloc()은 항상 heap 에 할당 해주는 것이고, 2. 그림1은 stack의 pf가 heap공간을 가리키는 것이고 (즉, 구조체가 heap에 있는거죠 ?!) 3. 그림1 -> 구조체가 heap만 사용하는 연속된 공간 그림2-> 구조체가 stack 및 임의의 heap을 사용하는 연속 x 공간 맞나요 ?!!
Q2에 관해서 다시 말씀드리자면 음... 제가 강의를 보며 이해하기로는 말씀 하신대로 메모리 공간을 차지하는 어떤 것 = 오브젝트 expression, identifier등은 그 오브젝트의 이름표 ? 라는 느낌이었습니다! 그래서 arr[0]은 expression이고, arr[0]의 값이 object인 것으로 이해했구요! 그래서 강의중 arr[0] 이 object다 ! 라고 하신 것에서 혼동이 있었습니다 !! L-value가 object다 라는 표현도 마찬가지구요 ㅠㅠ
답변 감사합니다! 이해를 확인하고자 조금만 더 질문 드리겠씁니다.. 아직 개념에 혼란이 많아 중복되는 질문이 있을 것 같아요 ㅠㅠ Q1. 상단 첨부의 이해가 맞는지, 잘못 이해한 부분이 있는지 확인 부탁드리고 싶습니다 ㅠㅠ Q2. 기본적으로 arr == &arr[0]이고, 거기에 이제 &arr도 같은 것이라는 것을 알게 됐구요! Q3. 그런데 Q2의 내용은 arr이 평범한 배열일 때고, parr처럼 포인터의 배열이라면 &parr은 따로 주소를 갖게 되는건가요? 아니면 Q2의 정리 그대로일까요? Q4. 강의 중 Notes 부분에서 ( 하단 첨부 사진) & arr[0] == arr[0] 인 이유는 arr[0] 이 배열명이고, &배열명 == 배열명 == &첫원소 기 때문이고, & parr[0] != parr[0] 인 이유는 parr[0] 값이 배열명 arr[0]과 같긴 하지만 parr[0]은 배열명이 아닌 포인터로서의 선언이 되었기 때문인건가요? 즉 포인터 선언 한 경우랑 아닌경우 차이인가요? (써놓고 보니 Q1과 같은 맥락의 질문이긴 하네요...)
답변 감사드립니다! 답변해주신 내용은 이해가 갔지만, 제 질문이 잘 전달이 되지 않았나 싶어서 다시 여쭙습니다 ㅠㅠ Q1.첫 콘솔 입력 : "* 공백 3 공백 5 공백 \n" 별 3줄이 잘 출력되고 다음 콘솔 입력이 뜹니다. 두번째 콘솔 입력 : "% 공백 2 공백 2 \n" 입니다! 총 입력된 값들은 순서대로 "* 공백 3 공백 5 공백 \n % 공백 2 공백 2 \n" 입니다. "* 공백 3 공백 5" 다음 루프에서는 공백부터 시작하게 되는 것 같습니다! 그래서 "공백 \n % 공백 2 공백 2 \n" 이 두번째루프의 시작인데, c 에 버퍼에 남은 공백이 대입된 뒤 scanf가 "\n % 공백 2 공백 2 \n" 순으로 만나는 것 같은데 (콘솔 입력 자체도 while 조건문이 아닌 body의 scanf에서 활성화 됩니다) 이 경우 scanf가 스킵 되고 기존 row, column 대입값인 3, 5가 유지되는 둘째 루프를 디버그로 확인했습니다! scanf 가 스킵되는 이유가, 1. \n을 만나서인지, 2. 아니면 \n을 만났지만 무시하고 %를 만나서 스킵되는 것인지 또 두 경우에서 Q3. 에서 답변 주신 것처럼 space 문자가 아닌 경우 는 입력버퍼에 유지되는 것을 이해하였는데 \n 은 제가 디버그를 해보아도 사라지는 것으로밖에 확인이 안되어서 ㅠㅠ 질문을 다시 드려봅니다! Q2. 의 경우는 int a, b; scanf("%d %d", &a, &b); 와 같은 경우에 답변 주신 것처럼 3 b 를 입력하면 a 에 대입이 되지만, b 3 을 대입할 경우를 말씀드린 거였습니다! 이 부분은 말씀주신것처럼 디버깅을 통해서 확인해보니 뒤의 값도 대입이 안되는 것으로 확인했습니다 ㅎㅎ!!!