728x90
1. 함수 (선언 / 정의 / 호출 / 반환)
2. 배열
3. 문자열 저장 (char 배열)
함수
- 함수 정의
- 함수를 정의할 때의 질문 3가지 = 함수의 구성
- 함수의 기능에 맞는 이름은 무엇인가? (함수명)
- 함수가 기능을 수행하는데 필요한 데이터는 무엇인가? (매개변수)
- 함수가 수행된 후의 결과는 무엇인가? (반환형)
- 함수를 정의할 때의 질문 3가지 = 함수의 구성
int sum(int x, int y) //함수 원형
{
int temp;
temp = x + y;
return temp;
}
- 함수 호출
- 호출할 함수명(인수1, 인수2);
- 입력된 인수값은 호출된 함수의 매개변수에 복사되어 사용된다.
sum(1, 2); //함수 호출
- 함수 반환
- 호출된 함수 실행을 끝내고 값을 반환할 때 return 문을 사용한다.
- 함수의 실행을 끝내고 호출한 곳으로 돌아갈 때 사용한다.
int main()
{
...
result = sum(1, 2); //호출 및 반환된 결과 도착
...
}
int sum(int x, int y)
{
int temp;
temp = x + y;
return temp; //결과 반환
}
- 함수 선언
- int sum(int x, int y);
- 매개변수명은 생략이 가능하다. ( ex. int sum(int, int); )
- 컴파일러가 함수를 인식할 수 있도록 알리는 역할
- 함수 호출 전 선언을 통해 반환형을 미리 컴파일러에게 알려야한다.
- 컴파일할 때, 함수를 호출한 자리에 반환값과 같은 형태의 저장공간을 준비하기 때문이다.
- 호출 전 선언 혹은 정의하지 않으면 기본 int 반환형으로 간주한다.
- 함수 선언이 없다면 함수 정의는 함수 호출 이전에 있어야한다. (주의!!)
- int sum(int x, int y);
- 매개변수가 없는 함수
- int sum(void) {...}
- int sum() {...}
- 반환값이 없는 함수
- void say(char[] str) { ... return; }
#include <stdio.h>
//함수 선언
void say(char s[]);
int main()
{
...
//함수 호출
say("hello");
...
}
//함수 정의
void say(char s[])
{
printf("%s", s);
return;
}
- 함수 내 변수 사용범위
- 변수의 사용 범위는 선언한 블록 내부로 제한된다.
- 변수명은 여러 함수에서 동일하게 선언 가능하다.
- 재귀호출 함수 (recursive call function)
- 자기 자신을 호출하는 함수
- 최초 호출한 곳이 아닌 이전에 호출했던 곳으로 돌아간다.
void say(int count)
{
printf("hello\n");
if(count == 3)
{
return;
}
say(++count);
printf("jam\n");
}
// hello
// hello
// hello
// jam
// jam
배열
- 배열 선언
- 자료형 배열명 [요소개수]; (ex. int ary[5];)
- 여러 변수 선언 VS 배열 선언
- 전체 저장 공간의 크기는 같습니다.
- 메모리에 할당되는 방식에 차이가 있습니다
- 여러 변수 선언: 각 변수는 독립적인 공간을 갖고 각각의 이름을 사용한다.
- 배열: 저장 공간이 연속으로 할당되며 배열명이 전체 공간의 이름이 된다.
- 배열 요소 사용
- 배열명[배열 요소 첨자]; (ex. ary[5];)
- 배열 요소는 포인터 연산을 통해 접근한다.
- 첨자가 사용범위를 벗어나면 배열에 할당된 영역을 벗어난 메모리를 사용하므로 침범한 영역의 용도에 따라 결과가 달라진다. (ex. int ary[5]; --> ary[6];)
- 배열 값 대입
- 배열명[배열 요소 첨자] = 값; (ex. ary[5] = 40;)
- 사용하지 않은 배열 공간에는 쓰레기 값이 남아있다.
- 배열 초기화
- 자료형 배열명 [요소개수] = { 요소[0] 값, 요소[1] 값, ... };
- 배열의 초기화는 최초 한 번만 가능하며 이후는 개별로 값을 대입해야한다.
- 초깃값이 배열 요소의 갯수보다 적은 경우, 차례대로 초기화 후 남은 요소는 기본값으로 채워진다.
int 0 float 0.0 char '\0' (null 문자) - 배열 요소의 개수가 생략된 경우 초깃값 개수만큼 배열 요소 개수가 정해진다.
- 배열 요소의 개수 계산
- 배열 요소의 개수 = 배열 전체 크기 / 배열 요소 하나의 크기
- 배열 요소의 개수 = sizeof(배열명) / sizeof(배열 요소);
int score[5];
int count = sizeof(score) / sizeof(score[0]);
for(int i=0; i<count; i++)
{
scanf("%d", &score[i];
}
문자열
- 문자열(char형 배열) 선언
- char 배열명[요소개수+1] = "저장할 문자열" (ex. char str[30] = "applejam";)
- 저장할 문자열의 길이보다 하나 이상 크게 배열을 선언해야한다.
- 초기화한 문자열은 배열에 차례대로 저장되어 문자열을 만든다.
- 문자열 끝과 남는 배열 요소에 \0 (널 문자) 가 저장된다.
- 널 null 문자 (\0)
- 아스키 코드 값이 0인 문자
- 문자열의 끝을 표시하는 용도
- 문자열 복사 strcpy
- strcpy( 저장될 배열명, 저장할 문자열 );
- 문자열의 길이가 다를 수 있으므로 대입 연산자로 문자열 복사가 불가하다.
- strcpy 함수는 char 형 배열에 새로운 문자열을 저장하는 함수
- 저장할 문자열의 길이만큼 char형 배열에 복사
char str1[80] = "cat";
char str2[80];
strcpy(str1, "tiger"); //str1 배열에 문자열 복사
strcpy(str2, str1); //str2 배열에 str1 배열의 문자열 복사
//str1: tiger
//str2: tiger
- 빈칸을 포함한 문자열 입출력 (gets, puts)
- scanf 사용시, 중간에 빈칸이 있는 경우 빈칸 전까지만 입력되는 부분을 보완
- gets( char형 배열명 );
- 입력 중간에 빈칸이나 탭 문자를 사용 가능하다.
- enter 를 누르기 전까지 배열에 저장한다.
- 배열의 크기를 검사하지 않아 메모리 영역 침범 주의 필요!
- puts( 문자열 혹은 char형 배열명 );
- 문자열을 화면에 출력한다.
- 문자열을 출력한 후에 자동으로 줄을 바꾸어준다.
char str[80];
printf("문자열 입력 : ");
gets(str);
puts("입력된 문자열 : ");
puts(str);
//문자열 입력 : cat
//입력된 문자열 :
//cat'C > C 문법' 카테고리의 다른 글
| 혼자 공부하는 C언어 (11~12강) (1) | 2025.09.07 |
|---|---|
| 혼자 공부하는 C언어 (9~10강) (0) | 2025.09.06 |
| 혼자 공부하는 C언어 (5~6강) (0) | 2025.09.03 |
| 혼자 공부하는 C언어 (3~4강) (1) | 2025.09.02 |
| 혼자 공부하는 C언어 (1~2강) (0) | 2025.09.01 |