일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- wargame
- Linux
- 취약점진단
- 기록
- 케이쉴드주니어
- 자격증공부
- reivew
- 웹해킹
- it자격증
- 클라우드
- 워게임
- DreamHack
- 드림핵
- 위험관리
- 정보처리기사
- keyword
- 보안용어
- 복습
- Review
- 공부
- 자격증
- IT
- Security
- 정리
- 리눅스마스터2급
- study
- 리눅스
- Shell
- webhacking
- 보안
- Today
- Total
IT Memory Note
[정보처리기사] 프로그래밍 언어 활용 : C 언어(4) 본문
1️⃣1️⃣ 구조체(Structure Type)
☆☆
(1) 구조체의 개념
- 사용자가 기본 자료형을 가지고 새롭게 정의할 수 있는 사용자 정의 자료형
(2) 구조체의 선언
struct 구조체명 {
자료형 변수명1;
자료형 변수명2;
...
};
struct 구조체명 구조체변수;
- 구조체 변수, 변수명 형태로 값을 가리킴
1️⃣2️⃣ 함수
☆☆☆
(1) main 함수
1. main 함수의 개념
- 프로그램이 실행하는 모든 프로그램의 시작점
- main 함수에 있는 명령어를 실행함
2. main 함수의 형태
자료형 main(파라미터) {
명령어;
}
- void main( ) 일 경우 반환할 값이 없으므로 return;을 사용하거나 return 자체를 사용하지 않고, int main( ) 일 경우 return 반환값;을 명시해주어야 함
- main 함수나 사용자 정의 함수는 return을 만나면 그 즉시 함수를 종료함
void main | int main |
void main() { return; } |
int main() { return 반환값; } |
※ void : '존재하지 않음' 이라는 뜻으로 반환 값이 없다는 의미로 사용
- 함수를 호출한 호출자에게 결과값을 제공하지 않는다는 의미의 자료형
(2) 사용자 정의 함수(User-Defined Function)
1. 사용자 정의 함수의 개념
- 사용자가 직접 새로운 함수를 정의하여 사용하는 방법
- 사용자 정의 함수에서 매개변수나 생성된 변수는 사용자 정의 함수로 종료되면 없어짐
※ 매개변수(Paraneter) : 함수를 호출할 때 인수로 전달된 값을 함수 내부에서 사용할 수 있게 해주는 변수
2. 사용자 정의 함수 선언
자료형 함수명(자료형 변수명, ...) {
명령어;
return 반환값;
}
3. 매개변수 전달 방법(Parameter Passing Mechanism)
⓵ 매개변수 전달 방법의 개념
- 함수가 필요로 하는 값을 매개변수로 만들면 함수를 호출하는 쪽에서 매개변수를 사용하여 해당 함수에게 변수 값, 변수 주소값을 전달하는 방식
⓶ 매개변수 전달 방법의 구성요소
구성요소 | 설명 |
전달인자 (Argument) |
• 실 매개변수(Actual Parameters)로도 불림 • 함수를 호출하는 쪽에서 전달하는 변수 값 또는 변수 주소값 |
매개변수 (Parameter) |
• 형식 매개변수(Formal Parameters)로도 불림 • 함수를 선언하는 쪽에서 전달받는 변수 값 또는 변수 주소값 |
#include <stdio.h>
int fn(int x, int y){ // 매개변수(Parameter)
...
}
void main() {
int i, j;
...
fn(i, j); // 전달인자(Argument)
}
⓷ 매개변수 전달 방법의 종류
종류 | 설명 |
Call by Value | • 변수 값을 넘겨주고, 이 값은 새로운 공간에 할당되어 사용하는 방식 • 형식 매개변수의 어떠한 변화도 실 매개변수에 아무런 영향을 미치지 않음 |
Call by Reference | • 변수 값이 아닌 변수가 사용 중인 메모리 공간의 주소를 넘겨주는 방식 • 실 매개변수의 주소를 형식 매개변수로 보냄 |
■ 매개변수 전달 방법
Call by Value | Call by Reference |
#include <stdio.h> int fn(int x, int y) { ... } void main() { int i, j; ... fn(i, j); } |
#include <stdio.h> int fn(int* x, int* y) { ... } void main() { int i, j; ... fn(&i, &j); } |
형식 매개변수(Formal Parameters)는 변수 선언과 동일하게 작성하고, 실 매개변수(Actual Parameters)는 변수명을 작성 | 형식 매개변수(Formal Parameters)는 간접값 연산자(*)를 이용해 포인터 변수 선언과 동일하게 작성하고, 실 매개변수(Actual Parameters)는 주소연산자(&)를 이용해 변수 주소값을 작성 |
4. 재귀 함수(Recursive Function)
⓵ 재귀 함수의 개념
- 함수 자신이 자신을 부르는 함수
⓶ 재귀 함수 선언
자료형 함수명(자료형 변수명, ...) {
...
함수명(변수명, ...)
...
return 반환값;
}
※ 함수명이 fn 이라고 하면, fn 함수 내에서 fn 함수를 호출하는 것을 재귀 함수라 함
(3) 표준 함수
1. 문자열 함수
⓵ strcat(String Concatenate) : 문자열끼리 연결하는 함수
strcat(dest, src); | src의 문자열을 dest 문자열 뒤에 붙임 |
strncat(dest, src, maxlen); | src의 문자열에서 maxlen의 개수만큼 dest 문자열 뒤에 붙임 |
⓶ strcpy(String Copy) : 문자열을 복사하는 함수
strcpy(dest, src); | src의 문자열을 dest 문자열에 복사 |
strncpy(dest, src, maxlen); | src의 문자열에서 maxlen의 개수만큼 dest 문자열에 복사 |
⓷ strcmp(String Compare) : 문자열을 비교하는 함수
strcmp(s1, s2); | s1, s2의 대소를 비교 |
strcmp(s1, s2, maxlen); | maxlen 길이만큼만 s1, s2의 대소를 비교 |
※ strcmp는 사전 배열 방식과 유사해서 문자열의 첫 번째 문자끼리 비교하고, 다르면 아스키코드 값을 통해 크고 작음을 판별함
- 문자열의 첫 번째 문자가 같으면 두 번째 문자끼리 비교하고, 그래도 같으면 세 번째 문자끼리 비교하는 식으로 해서 마지막 문자까지 같으면 두 문자열은
같다고 판별함
⓸ strlen(String Length) : 문자열의 길이를 알려주는 함수
strlen(s); | s의 길이를 알려줌 |
⓹ strrev(String Reverse) : 문자열을 거꾸로 뒤집는 함수
strrev(str); | str 내에 문자열을 거꾸로 뒤집음 |
⓺ strchr(String find Character) : 문자열 내에 일치하는 문자가 있는지 검사하는 함수
strchr(str, c); | str 내에 c가 존재하는지 알려줌 |
2. 수학 함수
⓵ sqrt : 양의 제곱근을 계산하는 함수
sqrt(n); | √n의 값을 계산 |
⓶ ceil : 소수점 올림 함수
ceil(n); | 소수점 올림 |
⓷ floor : 소수점 내림 함수
floor(n); | 소수점 내림 |
3. 유틸리티 함수
⓵ rand(Random) 함수 : 임의의 값을 생성하는 함수
rand(); | 임의의 정수값 1개를 생성 |
※ rand()는 0~32767 중에 하나의 값을 반환함
※ rand() 함수는 임의로 난숨나 생성해 주기 때문에 여러 번 실행했을 경우 동일한 숫자가 나올 수도 있음
⓶ srand(Seed Random) 함수 : 난수 생성 알고리즘에 사용하는 seed를 정해주는 함수
- srand 함수를 사용하면 rand 함수를 사용할 때 해당 seed 값에 해당하는 난수 패턴으로 생성함
srand(seed); | seed 값에 따라 난수 발생기를 초기화함 |
※ seed : 난수 알고리즘 실행하기 위해 쓰는 수
※ 컴퓨터는 난수를 난수 생성 알고리즘에 의해서 만드는데, 난수 생성 알고리즘의 seed 값이 같으면 프로그램을 실행할 때마다 계속 똑같은 패턴의 난수를 만들게 됨
⓷ time 함수 : 현재 시간을 가져오는 함수
- 1970년 1월 1일 이후로 몇 초가 경과했는지를 나타냄
time(NULL); | time 함수에 파라미터를 NULL로 하면 현재 시간을 리턴 |
※ seed 값을 프로그램 시작할 때마다 다르게 하도록 seed에 time 함수를 사용함
※ 현재 시간이 1970년 1월 1일 0시 0분 1초이면 1, 1970년 1월 1일 0시 0분 2초이면 2, 이런 식으로 1초가 지날 때마다 값이 1씩 증가함
⓸ atoi(ASCII to Integer) 함수 : 문자열을 정수형으로 변환하는 함수
atoi(str); | 문자열(str)을 정수(int)형으로 변환 |
※ 문자열을 저장하기 위해서 일반적으로 배열을 사용하지만, 문자형 포인터를 생성하면서 문자열을 대입할 수도 있음
⓹ atof(ASCII to Floating Point) 함수 : 문자열을 실수형으로 변환하는 함수
atof(str); | 문자열(str)을 실수(float, double)형으로 변환 |
⓺ itoa(Integer to ASCII) 함수 : 정수형을 문자열로 변환하는 함수
itoa(value, str, radix); | value를 변환하여 str에 radix 진수로 저장함 |
1️⃣3️⃣ 포인터(Pointer)
☆☆☆
(1) 포인터의 개념
- 변수 주소값을 저장하는 공간
(2) 포인터 선언
자료형* 포인터_변수명 = &변수명;
- 자료형 뒤에 *를 붙이면 주소를 저장하는 포인터 변수라는 의미이고, 일반 변수명에 &를 붙이면 해당 변수명의 주소값임
- int 형 변수를 가리키는 포인터 변수 선언 시 int+를, char 형 변수를 가리키는 포인터 변수 선언 시 char*를, float 형 변수를 가리키는 포인터 변수 선언 시 float*를 사용해야 함
- 주소에 해당하는 값을 가리킬 때는 *를 사용함
※ 주소에 해당하는 값을 가리키는 * 연산과 변수에 주소값을 나타내는 & 연산은 반대 기능이어서, *(&)과 같이 두 연산을 같이 쓰면 서로 상쇄됨
(3) 배열과 포인터
- "자료형 배열명[요소];"일 때 다음 코드는 동일함
< 배열의 i번지 주소와 i번지 값 >
구분 | 코드 |
배열의 i번지 주소 | 배열+i == &배열[i]; |
배열의 i번지 값 | *(배열+i) == 배열[i]; |
1. 1차원 배열과 1차원 포인터
- 1차원 배열에서 배열명만 단독으로 사용할 경우 1차원 포인터와 동일함
- 1차원 배열일 때는 배열명[요소] 형태, *(배열명+요소)일 경우 값을 가리키고, 1차원 포인터일 때는 포인터[요소] 형태, *(포인터+요소) 일 경우 값을 가리킴
2. 2차원 배열과 1차원 포인터
- 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일함
- 2차원 배열일 때는 배열명[요소] 형태, *(배열명+요소)는 1차원 포인터와 동일하고, 1차원 포인터에 대해 *과 [ ]을 이용해야 값을 가리킬 수 있음
3. 2차원 배열과 포인터 배열
4. 2차원 배열과 2차원 포인터
- 2차원 배열에서 배열명만 단독으로 사용할 경우 2차원 포인터와 동일함
- 2차원 배열일 때 배열명[요소][요소], *배열명[요소], **(배열명+요소)일 경우 값을 가리킴
(4) 구조체와 포인터
1. 구조체 변수와 구조체 포인터
- 구조체는 일반 구조체 변수로 접근할 때는 .으로 접근하고, 구조체 포인터로 접근할 때는 ->로 접근함
2. 1차원 구조체 배열과 1차원 구조체 포인터
- 1차원 구조체 배열에서 배열명만 단독으로 사용할 경우 1차원 구조체 포인터와 동일함
- 1차원 구조체 배열일 때 배열명[요소].변수명 형태, (*(배열명+요소)).변수명, 배열명->변수명 형태, (배열명+요소)->변수명 형태로 값을 가리킴
- 1차원 포인터일 때 포인터[요소].변수명 형태, (*(포인터+요소)).변수명 형태, 포인터->변수명 형태, (포인터+요소)->변수명 형태로 값을 가리킴
(5) 함수와 포인터
- 함수의 주소를 저장하고, 해당 주소의 함수를 호출하는 데 사용하는 포인터
리턴타입 (*함수_포인터)(함수파라미터);
(6) 사용자 정의 함수 포인터 반환
- 사용자 정의 함수의 반환 값으로 포인터를 전달받을 수 있음
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사] 프로그래밍 언어 활용 : 자바(2) (0) | 2024.08.14 |
---|---|
[정보처리기사] 프로그래밍 언어 활용 : 자바(1) (0) | 2024.08.14 |
[정보처리기사] 프로그래밍 언어 구현 : C 언어(3) (0) | 2024.08.13 |
[정보처리기사] 프로그래밍 언어 활용 : C 언어(2) (0) | 2024.08.13 |
[정보처리기사] 프로그래밍 언어 활용 : C 언어(1) (0) | 2024.08.12 |