[ 메모리 안에서 데이터가 저장되는 영역 ]
- 컴파일된 바이너리
- 전역변수
- malloc으로 할당된 메모리의 데이터
- 프로그램 내 함수와 관련된 데이터 (main데이터 포함)
[ swap 함수가 먹히지 않는 이유 ]
#include <stdio.h>
void swap(int a, int b);
int main(void)
{
int x = 1;
int y = 2;
printf("x is %i, y is %i\n", x, y);
swap(x, y);
printf("x is %i, y is %i\n", x, y);
}
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
swap 함수 -> 실행 후 해당 메모리 할당 종료 -> 여전히 main의 x,y에는 영향을 주지 않음
main 함수
[ 포인터를 사용 ]
#include <stdio.h>
void swap(int *a, int *b);
int main(void)
{
int x = 1;
int y = 2;
printf("x is %i, y is %i\n", x, y);
//x와 y의 주소를 전달
swap(&x, &y);
printf("x is %i, y is %i\n", x, y);
}
void swap(int *a, int *b)
{
int tmp = *a; //Go to the address in a.
//It will lead you to x.
//Put what's in x in tmp, which is 1.
*a = *b;
*b = tmp;
}
x,y가 가리키는 주소를 포인터로 바꿔줌으로써 해결 가능
'◦ Algorithm > CS' 카테고리의 다른 글
[CS50] 16진수, 포인터 (0) | 2021.11.09 |
---|---|
[CS50] 버블 정렬, 선택 정렬, 병합 정렬 (0) | 2021.11.09 |
[CS50] 재귀 (0) | 2021.11.08 |
[CS50] 구조체 (0) | 2021.11.08 |
[CS50] 알고리즘 표기법 (0) | 2021.11.08 |