일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Bandit
- C++ 언어 #핵심정리
- C언어 #핵심정리
- MySQL #핵심정리
- HTML #핵심정리
- Hacking #Baic
- C++ 언어 # 핵심 정리
- C언어 #부록
- C언어 # 핵심 정리
- C언어 # 부록
- PHP #핵심정리
- shell_script
- C++ 언어 # 핵심정리
- Today
- Total
목록C Language Basic (48)
cCcode

1. 전역 변수 사용하기 지금까지는 함수 안에서 선언하는 지역변수를 선언했습니다. 제가 지역변수는 선언한 해당 함수 내에서만 사용할 수 있다고 언급 했었죠. (함수의 범위는 중괄호 시작부터 끝까지 입니다.) 그에 반해 전역변수는 프로그램 전체에서 공유하는 값으로 모든 범위 즉, 모든 함수에서 사용할 수 있습니다. 이처럼 변수가 선언되지 않은 외부 블록에서는 변수를 사용할 수 없습니다. 이처럼 변수가 사용되는 범위(Scope)가 정해져있기 때문에 주의해야합니다. 다만, 이처럼 넓은 범위에 선언을 했다면 좁은 범위에서 사용가능합니다. 전역 변수는 함수 바깥에 선언합니다. + 전역 변수의 초기값은 (초기화 하지 않을 경우) 0으로 초기화 됩니다. 이게 초기화 해주지 않으면 쓰레기 값이 들어가는 지역변수와의 차..

1. 노드 추가 함수 사용하기 그전에는 단일 연결 리스트를 구현했는데요. 오늘은 연결리스트의 중간에 새로운 노드를 끼워넣는 함수를 사용할 예정입니다. 여기서 중요한 점은 cursor = head->next 형식으로 할당한다면 노드의 주소를 저장하기 때문에 해당 cursor 순회용 포인터를 해제하면 당연스레 해당 순회용 포인터에 저장된 노드 또한 해제 된다는 점입니다. 따라서 노드의 동적할당을 해제하는 부분을 보시면 우선 구조체를 선언합니다. 해당 구조체로 선언한 변수는 cursor 의 다음 주소를 저장하게 됩니다. 왜냐하면 노드를 해제하려면 필연적으로 cursor 도 해제되어야 하는데 cursor을 해제하게 되면 다음 노드의 주소로 접근할 수 없기 때문입니다. 그래서 cursor의 다음 주소를 임시로 저..

1. 퀵 정렬 함수 사용하기 버블 정렬 함수는 직접 구현했습니다만, 퀵 정렬의 경우에는 해당 정렬을 사용하기 위해 퀵 정렬 함수를 사용합니다. 퀵 정렬 함수에는 정렬할 배열 또는 메모리의 주소, 요소 개수, 요소 크기, 비교 함수를 넣어줍니다. (파일에 선언되어 있습니다.) qsort 함수를 사용하기전 비교 함수를 만들어야 합니다. 오름차순일 경우 1) one two 일 때는 1을 반환 내림차순일 경우 1) one two 일 때는 - 1을 반환 이건 qsort 함수를 사용하기 위한 약속입니다. 비교함수를 만들 때는 반드시 i..

1. 파일 포인터 활용하기 지금까지 파일을 사용할 때는 파일 크기를 이미 알고 있었기에 버퍼 크기를 파일 크기보다 크게 작성하는 게 가능했습니다. 하지만 실제로 파일 크기를 가정하고 코드를 작성할 수는 없습니다. 그래서 해당 파일의 크기를 구하고 싶다면 fseek 나 ftell 함수를 사용하면 됩니다. (파일에 선언되어 있습니다.) 파일 크기를 구할 때도 파일 포인터가 필요합니다. 따라서 fopen 함수 파일모드 "r"로 열었습니다. fseek 함수는 기준점에서 이동할 거리(크기)를 지정하여 파일 포인터를 이동시킵니다. 그 후 읽기/쓰기 함수를 사용한다면 그 파일 포인터가 이동된 위치부터 읽기/쓰기를 하게 됩니다. SEEK_END 외에도 fseek 함수에는 총 기준점 3개가 존재합니다. 간단히 말해 SE..

1) 막대 그래프 그리는 프로그램 #include #include int i; enum Centimeter { nine_centimeter, eight_centimeter, seven_centimeter, six_centimeter, five_centimeter, four_centimeter, three_centimeter, two_centimeter, one_centimeter, }; void PRINT_GRAPH(enum Centimeter C) // 1 ~ 9 { int count; printf(" y\n\n"); printf(" 8%c", 24); // 3 - 5, 6 - 2 for (i = 0; i < 9; i++) { count = 0; if (i != 0) printf(" %c", 5); /..

1. 파일에 문자열 작성하기 지금까지는 printf 로 서식 지정자를 통해 문자열을 화면에 출력할 수 있었고, sprintf 로 서식 지정자를 통해 문자열을 생성할 수 있었습니다. 그러면 이제는 fprintf 를 활용해 파일에 문자열을 작성하는 방법에 대해 알아보겠습니다. 파일에 문자열을 작성하기 위해선 fopen 함수로 파일을 열어 파일 포인터를 얻은 뒤 fprintf 함수로 문자열을 작성하고 fclose 함수로 파일 포인터를 반환하면 됩니다. (파일에 선언되어있습니다.) 파일은 .c 파일이 있는 폴더에 생성됩니다. 파일 모드의 종류는 다음과 같습니다. 파일모드는 t 와 b 가 단독적으로 사용될 수 없으며, 일반적으로는 rb 나 rt 나 w+b 처럼 읽기/쓰기 모드와 텍스트/바이너리 모드를 조합해서 사..

1. 재귀함수 사용하기 함수에서 다시 동일한 함수를 호출하는 재귀함수를 만들어보겠습니다. 위 파일은 결과처럼 3990번 함수를 호출하다가 프로그램이 종료됩니다. 그 이유는 함수를 호출할 때 사용하는 스택이 넘쳐 스택 오버플로우(Stack Overflow)가 발생했기 때문입니다. 따라서 재귀호출을 사용할 때는 아래와 같이 반드시 종료조건을 만들어줘야 합니다. 재귀함수를 통해 흔히들 아는 팩토리얼을 구현해보겠습니다. 혹시나 모르는 분들을 위해 팩토리얼이란 1부터 n까지의 숫자를 곱한 값이며, 기호로는 ! 를 사용합니다. ex) 5! = 5 x 4 x 3 x 2 x 1 = 120 2. 함수 포인터 사용하기 C언어에서는 함수명으로 함수를 직접 호출합니다. 그렇다면 함수를 배열이나 구조체에 멤버 또는 요소로 넣거..

1. 함수에서 구조체 매개변수 사용하기 함수에 전달해야 할 매개변수의 개수가 많아진다면, 그 매개변수들을 하나의 단위로 묶어서 구조체를 사용할 수 있습니다. 그럼 매번 그 많은 매개변수들을 전달해야 할 필요가 없어지죠. 함수를 호출할 때 구조체 변수를 넣어주면 구조체 변수의 모든 멤버들이 매개변수로 복사됩니다. 단, 구조체 크기가 커지면 커질수록 그만큼 큰 공간이 필요하기에 효율적이라 말하긴 어렵겠네요. 보통 매개변수로 구조체를 전달할 때는 포인터를 사용해야 함수 외부에서도 수정한 구조체를 사용할 수 있습니다. 그 단편적인 예로는 다음코드를 보시죠. 분명히 함수에서 값을 수정했는데도 처음에 수정한 값으로 결과가 나왔습니다. 그 이유는 구조체의 멤버들이 포인터가 아니므로 함수 외부에 값을 전달할 수 없기 ..