Pointer 5

[CS50] malloc과 포인터 복습

오늘부터는 메모리의 다음 강좌인 자료구조에 대해 공부해보겠습니다. 평소에 공부하던 자바가 아닌 C라 조금 낯설긴 한데 그래도 다양한 데이터 구조를 공부해보는 건 좋은 거 같아요 오늘은 그중에서도 데이터 구조를 정리하는데 중요한 포인터와 메모리에 대한 개념을 한번 더 복습해보겠습니다. 아래와 같이 main 함수를 작성해보겠습니다. int main(void) { int *x; int *y; x = malloc(sizeof(int)); *x = 42; *y = 13; } 이 코드는 문제없이 정상적으로 작동할까요?? 아니라면 어느 부분이 문제가 될까요?? 첫줄에 포인터를 이용해 x, y를 각각 선언해주었습니다. 그다음으로 x에는 malloc 함수를 이용해 int형의 사이즈에 해당하는 메모리를 할당합니다. 그리고..

[CS50] 메모리 교환, 스택, 힙

오늘은 메모리에 이미 저장된 값을 교환할 때 어떤 방식으로 교환해야 하는지에 대해 공부해보도록 하겠습니다. 가장 먼저 swap이라는 함수를 따로 만들어서 입력받은 정수 a, b를 교환하는 작업을 해보도록 하겠습니다. #include void swap(int a, int b); int main(void) { int x = 1; int y = 2; printf("x 는 %i, y 는 %i\n", x, y); swap(x, y); printf("x 는 %i, y 는 %i\n", x, y); } void swap(int a, int b) { int tmp = a; a = b; b = tmp; } 위의 코드처럼 x, y에 각각 정수를 입력하고 swap 함수를 사용해 바꿔봤습니다. 결과가 어떻게 나올까요?? 분명히..

CS 기초/메모리 2021.08.24

[CS50] 문자열 비교

오늘은 문자열이 두 개일 때 같은 내용을 담고 있는지?, 또 이 두 개가 직접적으로 비교가 가능한지에 대해 공부해보도록 하겠습니다. 지난 포스팅에서 문자열은 각 문자의 배열이고 각 문자는 메모리에 서로 다른 주소 값을 가지고 있다는 것을 공부했습니다. 실제로 확인해보면 #include int main(void) { char *s = "EMMA"; printf("%p\n", &s[0]); printf("%p\n", &s[1]); printf("%p\n", &s[2]); printf("%p\n", &s[3]); } 이렇게 코드를 작성하고 실행했을 때 주소값이 다르게 출력되는 것을 확인할 수 있습니다. ** 여기서 주소값을 보면 첫 번째 문자인 "E"를 시작으로 메모리상에 바로 옆에 저장되어있는 것을 볼 수 ..

CS 기초/메모리 2021.08.21

[CS50] 문자열

지금까지 문자열을 string이라는 자료형을 사용해 저장해왔습니다. 그런데 C에는 string이 실제로 존재하지 않는 자료형이라고 합니다. 그렇다면 문자열이 실제로 메모리상에 어떻게 저장되어있는지, 저장되어있는 문자열에 어떻게 접근해야 하는지 공부해보도록 하겠습니다. 지금까지 배우면서 문자열을 변수에 저장하기 위해 CS50 라이브러리에 있는 string 자료형을 사용해왔습니다. 예전부터 문자열은 문자의 배열이라고 배웠는데 만약 string s = "EMMA"; 라는 코드가 있다면 그림과 같이 s[0], s[1], ... 처럼 하나의 문자가 배열의 한 부분을 차지하고 마지막엔 \0인 null 종단 문자로 문자열의 끝을 나타내 줬습니다. 그렇다면 문자열의 주소는 어떻게 가리키게 될까요?? 위의 변수 s는 이..

CS 기초/메모리 2021.08.20

[CS50] 포인터

지난 포스팅에서 메모리 주소를 설명하면서 '&'연산자와 '*'연산자를 사용할 때 포인터라는 개념이 나왔는데 오늘은 이 포인터에 대해 공부해보도록 하겠습니다. 다시 한번 설명하자면 '*'연산자는 어떤 메모리 주소에 있는 실제값을 받아오게 해주는 기능을 합니다. 이 연산자를 이용해서 아래와 같이 포인터 역할을 하는 변수 선언도 가능합니다. #include int main(void) { int n = 50; int *p = &n; printf("%p\n", p); printf("%i\n", *p); } 결과는 어떻게 나올까요? 위 코드를 보면 int형 변수 n에는 50이라는 값이 저장되어있습니다. 그리고 *p라는 포인터 변수에 &n이라는 변수 n의 주소를 저장합니다. 그래서 int *p는 *이 이 변수가 포인..

CS 기초/메모리 2021.08.19