무조건 나온다 중요!
함수란 중복을 줄이는 것.
함수는 특정 작업을 수행하는 코드 블록이다.
함수는 코드의 재사용성을 높이고 프로그램을 더 구조적으로 만든다.
함수는 정의(선언)하는 부분이 있고,
그 함수를 호출(사용)하는 곳이 있다.
//함수 정의(선언부분)
int add(int a, int b) {
return a+b; //리턴값은 int다
}
int main() {
int result = add(3,4); //함수 호출
printf("3+4 = %d\n", result);
return 0;
}*Python은 메인함수가 없음,, 그냥 순서대로 읽으면 됨
C 언어의 조건문에서는 0을 거짓으로, 그 이외는 모두 참
다른 언어와 달리 C언어는 참일때 1을 뱉고, 0은 거짓으로 판단
0외의 값이 조건으로 오면 참으로 판단.
참고) 비교 연산자의 경우도 1 아니면 0으로 리턴함
1==1의 출력값은 1이고 1==2의 출력값은 0
배열에서 size는 갯수.
length는 길이.
int length = 0;
while(str[length] != '\0') {
length++;
}: str[length]의 값이 null('\0')과 같지 않으면 참이여서 반복문 실행
반대로 값이 null('\0')이 되는 순간 거짓이 되어 반복문 탈출
void processValues(int *num, char *ch) {
printf("입력된 숫자: %d\n", *num);
printf("입력된 문자: %c\n", *ch);
}
int main() {
int number = 42;
char character = 'A';
processValues(&number, &character);
return 0;
}이런 코드에서 넘겨주는 값이 배열이나 문자열이 아니기때문에
주소값을 넘겨주기 위해선 파라미터로 &를 붙여서 주소를 표현해줘야함
- 파라미터로 포인터 변수가 들어온다는 것은? 메모리 주소가 들어온다는 것
메모리 주소를 묻는 것은 애초에 나오지 않음
//*a = 203을 가지고 있는 주소, *b = 1004를 가지고 있는 주소
void swap(int *a, int *b) {
int temp = *a; //*a가 가지고 있는 값 = 203 = temp
*a = *b; //a의 '값'에 b의 '값'을 넣어라
//>> a라는 값이 1004가 됨
*b = temp; //b의 값에 temp에 저장되어 있던 203을 넣음
}
int main() {
int x = 203;
int y = 1004;
printf("교환 전: x=%d, y=%d\n", x,y);
swap(&x, &y); //메모리 주소를 줌
printf("교환 후: x=%d, y=%d\n", x,y); //교환된 값이 나옴
return 0;
}재귀함수(recursive function)란 무엇인가?
: 함수가 자기 자신을 호출하는 함수
>> 트리형태로 더해 나가는 문제가 많이 나옴
int factorial(int n) {
if(n==0) {
return 1;
} else {
return n*factorial(n-1);
}
}
int main() {
int number = 5;
printf("%d! = %d\n", number, factorial(number));
}factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1 * factorial(0)
factorial(0) = return 1
이런식으로 타고타고 가서 리턴값을 받고 역순으로 또 타고 올라가는 형식
*함수는 return 되는 순간 그 함수는 끝나벌인다~!~!
int charFreq(char *str, char ch) {
if(*str == '\0') {
return 0;
} else {
//여기서 ch는 l이기 때문에 str이 가르키는 값이 l이 아니라면
// 0을 return 하고 str이 가르키는 값이 l이라면 1을 리턴함
//str+1은 결국 다음 메모리 주소가 갈키는 값을 말함
return (*str == ch) + charFreq(str+1, ch);
}
}
int main() {
char myString[] = "hello world";
char targetChar = 'l';
printf("문자 '%c'의 빈도는 %d입니다.\n", targetChar, charFreq(myString, targetChar));
return 0;
}출력값 : 문자 ‘l’의 빈도는 3입니다.
특정 문자가 몇번 나오는지 확인 할 수 있는 것…
외울 것 요약
- 함수의 리턴값을 힌트로 어떤 값이 나가는지 파악하자
- 함수는 3개를 중요시 보면 된다. 호출부분, 입력값, 리턴값
- 메모리를 가리키는 포인터 변수(*)가 입력값으로 되어있을 때는 주의해서 보자
- 재귀함수는 차근차근 그 다음 스텝을 적어가면서 풀어보자
Share article