노드와 포인터 관련해서 질문드립니다.
뿡뿡몬
질문 제목 : 노드와 포인터 관련해서 질문드립니다.트리를 노드로 표현하는 코드를 짰는데, 잘 이해가 안가는 부분이 있어서 질문 드립니다.질문 내용 :
#includestdio.h
#includestdlib.h
typedef struct tnode tnode;
typedef struct tnode {
int data;
tnode *left, *right;
} tnode;
tnode* getnode();
void consttree(tnode *);
void preorder(tnode *);
void inorder(tnode *);
void postorder(tnode *);
int main()
{
tnode *t = getnode();
t-data = 0;
t-left = null;
t-right = null;
consttree(t);
preorder(t);
printf(\n);
inorder(t);
printf(\n);
postorder(t);
printf(\n);
free(t);
t = null;
return 0;
}
tnode* getnode()
{
return (tnode *)malloc(sizeof(tnode));
}
void consttree(tnode *t)
{
tnode *node[7];
int i;
int num[7] = { 1, 2, 3, 4, 5, 6, 7 };
for (i = 0; i 7; i++)
{
node[i] = getnode();
node[i]-data = num[i];
node[i]-left = null;
node[i]-right = null;
}
node[4]-left = node[6];
node[1]-left = node[3];
node[1]-right = node[4];
node[2]-right = node[5];
t-data = node[0]-data;
t-left = node[1];
t-right = node[2];
}
void preorder(tnode *t)
{
if (t != null)
{
printf(%d\n, t-data);
preorder(t-left);
preorder(t-right);
}
}
void inorder(tnode *t)
{
if (t != null)
{
inorder(t-left);
printf(%d\n, t-data);
inorder(t-right);
}
}
void postorder(tnode *t)
{
if (t != null)
{
postorder(t-left);
postorder(t-right);
printf(%d\n, t-data);
}
}
제가 궁금한건 consttree함수에서 빨갛게 칠해진 부분입니다. 제가 처음에는 t = node[0]; 로 했었고 이렇게 실행하자 consttree함수에서 빠져나온 후 t의 상태를 보니 t-data = 0, t-left = null, t-right = null인 상태였습니다. 즉, 메인함수 처음 시작할 때 t를 초기화해줬던 상태에서 변화가 없었습니다. 그런데 지금 위 코드로 바꾼 뒤 실행을 하자 consttree함수에서 변한 t의 값이 그대로 메인함수로 가져와서 제가 원하는 대로 실행이 됐습니다. 이건 왜 이런건가요??
-
창의적
포인터... 어렵네요 ㅠ 친절한 답변 감사합니다!
-
불꾼
constTree함수의 T는 주솟값을 가지고 있고 이건 어딘가의 할당되어 있는 공간이죠.
위 내용처럼 하면 이 어딘가의 할당되어 있는 곳에 값을 넣어두고 constTree함수가 끝나면
constTree함수의 T는 지역변수라 사라집니다. -
들찬
그런데 지금 상태의 코드로는 제가 원하는대로 제대로 실행이 되던데 이건 왜 되는건가요??
-
바르고
constTree함수안에 T는 main 함수의 T의 주소값을 가지는 지역변수입니다.
따라서 constTree내의 T의 주소값을 node[0]으로 바꾸셔도 함수가 끝나는 동시에 끝나버립니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2695766 | 달팽이 배열 어디서 틀렸는지 모르겠습니다ㅠㅠ | 연분홍 | 2025-05-23 |
2695738 | fopen과fclose질문~~ (5) | 희선 | 2025-05-23 |
2695707 | 3의 배수 나타내기. (2) | 수리 | 2025-05-23 |
2695626 | 피보나치수열 과제 때문에 질문 드립니다. (6) | 옆집언니 | 2025-05-22 |
2695595 | 포인트공부중입니다 int형에서 4=1 인가요? (3) | 족장 | 2025-05-22 |
2695567 | 드라이브 고유번호를 가져오는 함수 (2) | 초코맛사탕 | 2025-05-21 |
2695533 | 음수의 산술변환! 질문이요 ㅠㅠ... (4) | 꽃여름 | 2025-05-21 |
2695506 | 구조체 배열 이용 도서목록 출력 프로그램 (1) | 가을귀 | 2025-05-21 |
2695450 | c언어 함수 질문이요.... | 이슬비 | 2025-05-20 |
2695403 | VirtualAlloc함수 및 메모리 질문 | 크리에이터 | 2025-05-20 |
2695355 | c언어 for함수 | 미쿡 | 2025-05-19 |
2695327 | 안녕하세요 제가 이번에 좀 큰 프로그램을.. | 악당 | 2025-05-19 |
2695295 | mutex동기화의 thread기반 채팅 서버소스 질문입니다 | 그루터기 | 2025-05-19 |
2695270 | 질문이요..swap 관한겁니다..ㅠㅠ (3) | 콩알녀 | 2025-05-19 |
2695244 | 노땅초보궁금한게 하나 있는데요..반복문(while문)초보자질문 (6) | 큰꽃늘 | 2025-05-18 |
2695166 | do while 문 어떤것이잘못된건지 모르겠어요 (2) | 아이폰 | 2025-05-18 |
2695122 | 구조체에 대해 물어보고 싶은게 있습니다 ^^^.. (7) | 수련 | 2025-05-17 |
2695091 | txt 파일 입출력 후 2차 배열에 저장하기입니다. (3) | 헛장사 | 2025-05-17 |
2695063 | 수도요금 프로그램좀 짜주세요. | 시내 | 2025-05-17 |
2695033 | 답변좀요ㅠㅠ (1) | 비사벌 | 2025-05-16 |