Language

Language/C

포인터(完) - 연습문제 풀이

교재에 있는 포인터에 관한 챕터를 모두 끝냈다. 이제 문제를 풀면서 완전히 끝내보자. 책의 필자는 도전3, 4를 먼저 풀도록 권하므로 먼저 풀어보자. 도전 3. 의사 난수(pesudo random number)에 관한 문제이다. stdlib헤더의 rand함수를 통해 0이상 RAND_MAX만큼 생성하는 rand함수의 값을 적절히 변경하여 0이상 99이하의 난수5개를 출력하라. rand함수를 100으로 나눈 나머지를 출력하면 끝 #include #include int main () { printf("%d", RAND_MAX); for (int i = 0; i < 5; i++) { printf("%d \n", rand()%100); } return 0; } 도전 4. rand함수는 한번 출력되면 값이 고정이 ..

Language/C

포인터(9)

지금까지 변수에 관한 포인터를 이야기했었다면 이번엔 다른 포인터를 알아보자. 함수 포인터 프로그램의 모든 변수는 역할에 맞게 메모리에 할당되는데, 변수뿐만이 아니라 함수 또한 메모리에 할당된다. 이를 통해 함수도 하나의 포인터라고 볼 수 있는 것이다. 물론 배열처럼 상수형 포인터이다. 하지만 지금까지 선언했던 포인터변수와는 조금 다른 방식으로 선언하게 되는데, 이러한 포인터 변수들을 함수 포인터 변수라고 한다. 함수 포인터 변수를 선언하기 위해서는 우선 함수 포인터의 포인터형을 결정해야 한다. 모든 변수가 그렇듯이 형을 결정하지 못하면 포인터변수를 선언할 수 없으니까 말이다. 다음 함수를 통해 형을 결정해보자. int func (int num) {...} 이 함수를 뜯어보면 다음과 같은 정보를 알 수 있..

Language/C

포인터(8) - 下

https://codejin.tistory.com/48 포인터(8) - 上 // 일정이 있어서 잘라서 노트를 정리해야겠다. 지금까지 포인터를 배우면서 우리는 한가지 결론을 지겹도록 말했다. 배열의 이름은 포인터이다. 그렇다면, 이건 다차원 배열에서도 통한다는 뜻 codejin.tistory.com 계속해서 이어가자. 2차원 배열 arr에서 arr와 arr[0]은 같은 위치를 가르키는 다른 변수라고 했다. 계속해서 2차운 배열의 형이 무엇인지 알아가보자. 포인터 연산 - 배열이름에 1을 더해보자 TYPE형 1차원 배열이름에 1을 더하면 sizeof(TYPE)만큼 증가하였다. 이를 역으로 이용하면 어떤 1차원 배열의 값에 1을 더했을때 sizeof(TYPE)만큼 증가했다면, 그 배열은 TYPE형인 것을 유추..

Language/C

포인터(8) - 上

// 일정이 있어서 잘라서 노트를 정리해야겠다. 지금까지 포인터를 배우면서 우리는 한가지 결론을 지겹도록 말했다. 배열의 이름은 포인터이다. 그렇다면, 이건 다차원 배열에서도 통한다는 뜻이다. 그래서 이번 8번째 정리에서는 다차원 배열과 포인터에 관해 공부해보자. 2차원 배열이름의 포인터 형 다음 배열이름의 포인터형은 뭘까? int arr[10]; 배열이름 arr는 int형 포인터이다. 그러면 다차원 배열은 뭘까? 여러 예제들을 살펴보며 이를 증명해나가보자. 다음의 2차원 배열을 통해 알아보자. int arr[3][3]; 언제나 그렇듯 배열의 이름은 제일 첫 번째의 요소를 가르킨다. 그러니 arr라는 배열이름도 arr[0][0]을 가르키는 셈이다. 또한 배열속의 요소에 접근할때 우리는 가로, 세로값을 모..

Language/C

포인터 (7) + 간단한 문제풀이

포인터도 결국 변수였다. 그리고 포인터는 메모리에 할당된 변수의 주소를 저장한다. 무슨 말인가? 포인터의 주소를 저장하는 포인터도 있을 것이다. 그리고 그 변수를 또 가르키는 포인터도 가능하다...! 포인터를 가르키는 포인터 변수, 이중 포인터 변수 포인터 변수도 변수인 이상, 주소값을 저장하고 있는 하나의 변수이다. 따라서 메모리 어딘가에 할당되는 것이다. 그러면 포인터를 가르키는 포인터는 기존 문법으로 사용하면 되는 것인가? 아니다. 포인터변수의 주소값을 저장하는 것은 그 변수의 자료형 이중 포인터를 사용해야 한다. #include int main () { int num = 1; int *ptr1 = &num; // int *ptr2 = &ptr1; // warning: initialization f..

Language/C

포인터(6.5)

이번 정리는 포인터 얘기는 아니지만, 배열은 포인터와 거의 비슷하니 뭐 포인터는 맞겠지. 지금까지 다룬 배열은 1차원 배열만을 다뤘지만, 차원이라는 단어가 붙은 이상 그 위의 차원도 당연히 있을 것이다. 그래서 이번 정리는 다차원 배열에 관한 정리를 해보자 다차원 배열 1차원 배열은 논리적으로 선형적인 구조를 띤다. 이를 확장하여 2차원배열은 논리적으로 평면구조, 3차원배열은 직육면체구조의 배열이다. 그러면 4차원 이상의 배열은 논리적으로 어떤 형태일까? 당연히 우리는 알리가 없다. 사실 쓸모도 없고, 논리적인 구조를 이해하기도 힘들다. 하지만 컴파일러는 문법적으로 허용해준다(어떻게 가능한지는 후술하겠다). 따라서 다차원 배열은 보통 2, 3차원 배열을 말한다. 이제 선언방법을 보자. TYPE dim_1..

Language/C

포인터(6)

(이 책 기준)포인터의 기초적인 부분과 1차원 배열까지 모두 배웠다. 배웠으면 써먹는게 좋다. 마침 이 책의 14강까지 끝나 포인터와 1차원 배열에 관한 개념이 끝나고 15강으로 들어와 도전문제들이 나온다. 이 책의 필자는 문제 5번이 정렬에 관한 문제라고 하여 제일 먼저 푸는 것을 추천했으므로 5번먼저 풀고 1번부터 풀겠다.(아니 그럴거면 그냥 1번에 정렬문제를 놓지) 도전 5. 내림차순의 버블정렬을 구현하여 길이 7의 1차원 int형 배열을 내림차순으로 정렬한 후 출력하는 문제. 책의 저자는 이 문제를 내기전에 오름차순의 버블정렬을 설명 및 구현해놓았으니 구현한건 보지말고 설명만 보고 만들어 보자. 버블정렬의 큰 틀은, (오름차순 기준)인접한 두 수를 비교하여 큰 수를 오른쪽으로 계속 밀어내는 것이다..

Language/C

포인터(5)

이번에는 함수에 배열(포인터) 대상의 인자전달에 관해 이야기를 하려고 한다. 하지만 그전에 함수에서 인자의 전달이 어떻게 되는지 먼저 짚고 그 다음으로 넘어가자. 인자 전달의 기본방식 - 복사 함수호출시 전달되는 인자의 값은 매개변수에 복사가 된다. 다음 예제를 살펴보자. #include int test_func (int num) { return num + 1; } int main () { int test = 1; int a = test_func(test); // test에 저장된 값이 num에 복사된다. } 이 코드에서 test_func함수에 test라는 값을 인자로 전달하고 있다. 언뜻보면 test변수 자체를 넘기는 것 같지만, 사실은 test에 저장된 값을 test_func의 인자인 num에 복사하..

CodeJin
'Language' 카테고리의 글 목록