[코딩도장] Unit 63 ~ 65 1. 포인터 매개변수 1. 포인터 매개변수 사용하기 C언어에서 값을 여러개 반환하는 함수를 만들 때 포인터 매개변수를 사용한다 반환값자료형 함수이름(자료형 *매개변수1, 자료형 *매개변수2) { } ( ) 안에서 자료형 뒤에 * 를 붙여 매개변수를 포인터 형태로 만든다 void swapNumber(int *first, int *second) // 반환값 없음, int 포인터 매개변수 두 개 지정 { int temp; // 임시 보관 변수 // 역참조로 값을 가져오고, 값을 저장함 temp = *first; *first = *second; *second = temp; } 매개변수를 int *first, int *second 와 같이 포인터 형식으로 지정해준다 함수 안에서..
전체 글
[코딩도장] Unit 60 ~ 62 1. 함수 1. 함수 정의하기 함수를 정의하는 방법은 반환값 자료형, 함수 이름, ( ) 순으로 적어준 뒤 { } 안에 원하는 코드를 작성하면 된다 함수는 main 함수 바깥에서 작성해야 한다 void hello() // 반환값이 없는 hello 함수 정의 { printf("Hello, world!\n"); // Hello, world! 출력 } 함수의 반환값 자료형 부분에 void 를 적어주면 함수의 반환값이 없다는 뜻이 된다 int main() { hello(); // hello 함수 호출 return 0; } main 함수 안에서 함수이름을 적어준 뒤 ( ) 를 붙이면 함수를 사용할 수 있다 이렇게 함수를 사용하는 방법을 함수를 호출(call) 한다 라고 부른다 ..
[코딩도장] Unit 58 ~ 59 1. 자료형 변환 1. 기본 자료형 변환하기 C언어는 자료형이 같거나 크기가 큰 쪽으로 저장하면 자료형이 자동으로 변환된다 ※ 자료형이 다르면서 크기가 작은 쪽으로 변환하면 컴파일 경고가 발생한다 자료형을 크기가 큰 쪽으로 자동 변환하는 것을 형 확장이라 한다 반대로 크기가 작은 쪽으로 변환되는 것을 형 축소라고 한다 형 축소가 발생할 때 컴파일 경고가 뜨지 않도록 만드는 것을 형 변환이라고 한다 자료형을 지정하여 변환하는 것을 명시적 형 변환이라 한다 자료형을 변환하려면 변수나 값 앞에 변환할 자료형을 ( ) 로 묶어주면 된다 (자료형) 변수 int num1 = 32; int num2 = 7; float num3; num3 = num1 / num2; // 컴파일 경고..
[코딩도장] Unit 57 1. 열거형 1. 열거형 사용하기 열거형은 정수형 상수에 이름을 붙여 코드를 이해하기 쉽게 해준다 enum 키워드를 사용하여 정의하고 enumeration 에서 따왔다 enum DayOfWeek { // 열거형 정의 Sunday = 0, // 초깃값 할당 Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; } (닫는 중괄호) 뒤에는 반드시 ; (세미콜론)을 붙여줘야 한다 열거형도 정의만 해서는 사용할 수 없다 enum DayOfWeek week; 열거형도 변수로 선언해서 사용한다 열거형의 값은 처음만 할당해주면 아래에 오는 값들은 1씩 증가하며 할당된다 아무것도 할당하지 않으면 0부터 시작한다 Sunday 에 0을 할당하면 M..
[코딩도장] Unit 54 ~ 55 1. 공용체 1. 공용체 사용하기 공용체와 구조체는 정의 방법이 같지만 멤버를 저장하는 방식에서 차이가 있다 구조체는 각 멤버들이 각각 공간을 차지한다 공용체는 가장큰 자료형의 공간을 공유하여 사용한다 union Box { // 공용체 정의 short candy; // 2바이트 float snack; // 4바이트 char doll[8]; // 8바이트 }; 공용체는 union 을 사용하여 선언한다 공용체도 정의만 해서는 사용할 수가 없기 때문에 변수로 선언해서 사용해야 한다 union Box b1; // 공용체 변수 선언 Box 공용체에서 가장 큰 자료형은 char doll[8] 로 8바이트이다 따라서 공용체의 크기는 8바이트가 된다 공용체는 가장 큰 자료형의 공간을..
[코딩도장] Unit 51 ~ 53 1. 구조체 멤버 정렬 1. 구조체 멤버 정렬 사용하기 컴퓨터 CPU 가 메모리에 접근할 때 32비트 CPU는 4바이트 64비트 CPU는 8바이트 단위로 접근한다 C언어 컴파일러는 CPU가 메모리의 데이터에 효율적으로 접근할 수 있도록 구조체를 일정한 크기로 정렬하게 된다 ex) 2, 4, 8, 16 ※ 사진이나 네트워크 패킷같이 정렬을 하면 안되는 경우도 있다 struct PacketHeader { char flags; // 1바이트 int seq; // 4바이트 }; 가상 네트워크 패킷 구조체를 정의하고 struct PacketHeader header; printf("%d\n", sizeof(header.flags)); // 1: char는 1바이트 printf("..
[코딩도장] Unit 48 ~ 49 1. 구조체 1. 구조체 사용하기 구조체는 struct 키워드로 정의한다 구조체는 보통 main 함수 바깥에 선언한다 함수 안에 선언하게 되면 해당 함수 안에서만 구조체를 사용할 수 있다 struct Person { // 구조체 정의 char name[20]; // 구조체 멤버 1 int age; // 구조체 멤버 2 char address[100]; // 구조체 멤버 3 }; struct 키워드 뒤에 구조체 이름을 지정해주고 { } 안에 변수를 선언한다 구조체 안에 들어있는 변수는 멤버라고 한다 구조체를 정의할 때는 중괄호 끝에 반드시 ; 을 붙여준다 구조체를 사용하려면 구조체 변수를 선언해야 한다 struct Person p1; 일반 변수로 선언한 구조체의 멤버에 ..
[코딩도장] Unit 41 ~ 45 1. 문자열 길이 구하기 (strlen) 1. strlen size_t strlen(const *_str) strlen 함수는 문자열의 길이를 구하는 함수이다 헤더 파일에 선언되어 있다 char *s1 = "Hello"; // 포인터에 문자열 Hello의 주소 저장 char s2[10] = "Hello"; // 크기가 10인 char형 배열을 선언하고 문자열 할당 printf("%d\n", strlen(s1)); // 5: strlen 함수로 문자열의 길이를 구함 printf("%d\n", strlen(s2)); // 5: strlen 함수로 문자열의 길이를 구함 strlen 함수가 문자열의 길이를 구할 때는 NULL 부분은 포함하지 않는다 s2 와 같이 배열의 크기와..
[코딩도장] Unit 39 ~ 40 1. 문자열 1. 문자열 사용하기 C언어에서 문자열은 " " 를 이용하여 사용한다 char c1 = 'a'; char *s1 = "Hello"; 문자는 ' ' 를 사용해서 1바이트 크기의 char 에 저장한다 문자열은 1바이트를 넘기 때문에 포인터에 저장한다 printf 로 문자열을 출력할 때는 %s 를 사용한다 C언어의 문자열은 마지막에 항상 널(NULL) 문자가 붙는다는 것이다 ※ NULL 은 0으로도 표현가능하고 문자열의 끝을 나타낸다 ※ 포인터로 할당한 문자열은 읽기 전용이기 때문에 수정이 불가능하다 문자열은 문자 배열에도 저장할 수 있다 char s1[10] = "Hello"; 배열 요소 하나하나에 문자가 저장된다 배열이기 때문에 인덱스는 0부터 시작한다 배열..
[코딩도장] Unit 36 ~ 38 1. 배열 1. 배열 사용하기 C언어에서 배열은 변수 이름뒤에 [ ] 대괄호를 붙여서 선언한다 배열의 값을 초기화 할 때는 { } 중괄호를 사용한다 { } 는 배열을 선언할 때만 사용한다 int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; int numArr[10]은 크기가 10인 int 형 배열을 선언한다는 뜻이다 { } 안의 값 개수는 배열의 크기보다 크면 안된다 배열의 요소에 접근하려면 배열 뒤의 [ ] 안에 각 요소의 인덱스를 지정해주면 된다 ※ 배열의 인덱스는 항상 0부터 시작한다 numArr 배열의 첫번째 요소는 numArr[0] 이 된다 배열의 크기는 sizeof 연산자를 이용해서 구한다 int n..