로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
입문

모두를 위한 컴퓨터 과학 (CS50 2019)

임시 이미지 David J. Malan (데이비드 J. 말란)
http://www.boostcourse.org/cs112/forum/51587
좋아요 15504 수강생 34435

안녕하세요 제가 속한 코치님의 질문 게시판에도 올린 내용이지만

한 코치님의 답변을 기다리기보단 여러 다른 코치님들의 답변을 볼 수 있을것 같아 질문올립니다.

(코치님이 아니라 아시는 분이 답변을 주셔도 좋을 것 같습니다.)


1. 미션 2의 코드에서 main의 내부를 보면 처음 root를 아래와 같이 생성하는데

 StackNode* root = NULL;

이후에 push, pop, peek 함수의 인자로 root가 아닌 &root를 전달한 이유가 궁금합니다.


2. 위 질문에 이어서

샘플미션에서는 listA를 인자로 전달해서, append함수에서 temp=l 로 temp->data 등 l의 data에 접근했는데(*l 이나 *temp가 아니라요) 왜 이와 다르게 &root를 전달했는지 모르겠습니다.

때문에 각 함수에서 매개변수로 StackNode** root를 받는데, 이 때 root, *root, **root가 각각 무엇인지 혼란이 오네요.

한가지 예를 들자면 push 함수 내에서 root에 아무런 값이 없으면 node를 생성해 root에 할당하는 아래의 코드를 작성했는데,

*root = createStackNode(data); //createStackNode는 node를 반환하므로 *root=node라고도 표현할수 있을것 같아요

아래의 코드는 어떤 차이때문에 오류가 발생하는지 모르겠습니다.

root=createStackNode(data);

3. 또 pop과 peek 함수 에서 가장 먼저 stack이 비어있는지 확인하기 위해 아래의 코드를 사용합니다.

isEmpty(*root)

이때는 왜 push, pop, peek 함수와 달리 *root를 인자로 전달하는지?

&root나 root를 전달해 매개변수로 StackNode** root를 받지 않는지?

(차이를 모르는 입장에서 일관적이지 않다고 느껴지는데 어떤 차이 때문에 다르게 작성되었는지?)

isEmpty는 아래의 코드와 같이  !root를 반환하는데 !*root와 차이가 어떻게 되는지? 궁금합니다.

int isEmpty(StackNode* root) {
    return !root;
}

4. 미션 3에서 createQueue 함수의 내용을 보면 아래의 내용이 있는데,

 queue->array = (int *)malloc(sizeof(int)*queue->capacity);

 queue->array 와  *queue->capacity 는 각각 다른 값에 접근하지만(array와 capacity)

동일한 queue 내부의 값으로 접근하는데, queue-> 와  *queue->의 차이가 무엇인가요?


미션으로 주어진 코드를 이해하는데도 오래걸려서, 미션 4번은 아직 살펴보지 못해 질문내용이 없네요 추가질문 있으면 글 남기겠습니다. 감사합니다.