본문 바로가기

Programming/C

(20)
[ProjectH4C] 코딩도장 Unit 54~55 Write-Up 공용체 공용체란, 구조체와 정의 방법은 같지만 멤버를 저장하는 방식에 차이가 있다. 구조체는 멤버들이 각각 공간을 차지하지만 공용체는 하나의 공간에 모든 멤버가 공간을 공유한다. 그림으로 표현하면 다음과 같다. 공용체는 멤버로 선언된 자료형 중 가장 큰 자료형의 공간을 공유한다. 위의 그림의 경우 int형이 4바이트로 가장 크기 때문에 short, char 자료형이 int의 공간을 공유한다. 공용체를 정의하는 방법은 다음과 같다. union 공용체이름{ 자료형 멤버1; 자료형 멤버2; ... }; 각 멤버에 접근하는 방법이나 사용하는 법은 구조체와 동일하며 공용체도 typedef 선언과 익명 공용체 선언이 가능하다. 엔디언(Endian) 엔디언이란, 값을 메모리에 저장할 때 연속된 공간에 값을 배열하는 ..
[ProjectH4C] 코딩도장 Unit 51~53 Write-Up 구조체 활용 멤버로 문자형 변수와 정수형 변수를 하나씩 가지고 있는 구조체가 있다고 치자. 문자형은 1바이트, 정수형은 4바이트이기 때문에 구조체의 전체크기는 5바이트가 되어야 하지만, 아래의 코드에서 실제 구조체의 크기를 출력해보면 5바이트가 아닌 8바이트가 출력된다. #include struct PacketHeader { char flags; // 1바이트 int seq; // 4바이트 }; int main() { struct PacketHeader header; printf("%d\n", sizeof(header.flags)); // 1: char는 1바이트 printf("%d\n", sizeof(header.seq)); // 4: int는 4바이트 printf("%d\n", sizeof(heade..
[ProjectH4C] 코딩도장 Unit 48~50 Write-Up 구조체 보통은 필요할 때마다 변수를 하나씩 선언해서 사용하지만, 여러 개의 변수를 하나로 묶어서 한번에 관리하는 방법이 있다. 만약 인적 정보를 처리한다고 하면 이름, 나이, 주소에 관한 변수를 각각 선언해서 저장하면 되지만, 여러 사람의 인적정보를 각각 구분해서 저장하고 싶다면 코드가 굉장히 복잡해지고 비효율적이다. 이럴 때 자료를 조금 더 체계적으로 관리하기 위해 사용하는 것이 구조체이다. 기본적인 구조체 정의 방법은 다음과 같다. struct Person{ char name[20]; int age; char address[100]; }; Person이라는 구조체 안에 이름, 나이, 주소를 저장할 수 있도록 선언하는 법이다. 이렇게 정의한 구조체를 사용하는 방법은 다음과 같다. struct Perso..
[ProjectH4C] 코딩도장 Unit 46~47 Write-Up 문자열 변환 프로그래밍을 하다 보면 출력 결과는 숫자이지만 출력 형태는 문자열인 경우가 종종 있다. 이러한 경우에 문자열을 int, float 형으로 변환하거나 int, float형의 숫자를 문자열로 바꾸어주는 함수가 있다. atoi(문자열) atoi() 함수는 문자열을 정수로 바꾸어 준다. Ascii TO Integer의 약자이며, stdlib.h 헤더 파일에 선언되어 있다. #include #include // atoi 함수가 선언된 헤더 파일 int main() { char *s1 = "283"; // "283"은 문자열 int num1; num1 = atoi(s1); // 문자열을 정수로 변환하여 num1에 할당 printf("%d\n", num1); // 283 return 0; } 실행 결과 ..
[ProjectH4C] 코딩도장 Unit 41~45 Write-Up 문자열 다루기 C언어에서는 문자열을 다루는 여러가지 함수들을 제공한다. 이들은 모두 string.h 헤더파일에 선언되어 있다. 1. 문자열의 길이 문자열의 길이를 반환하는 함수로 strlen(str) 함수가 있다. 이 때 인자로 길이를 구하고자 하는 문자열이 저장된 배열 또는 포인터를 넘긴다. 반환 값은 정수 형태이다. #include #include // strlen 함수가 선언된 헤더 파일 int main() { char *s1 = "Hello"; // 포인터에 문자열 Hello의 주소 저장 char s2[10] = "Hello"; // 크기가 10인 char형 배열을 선언하고 문자열 할당 printf("%d\n", strlen(s1)); // 5: strlen 함수로 문자열의 길이를 구함 print..
[ProjectH4C] 코딩도장 Unit 39~40 Write-Up 문자열 C언어에는 문자 자료형 char가 존재하지만 문자열을 저장하는 자료형은 존재하지 않는다. 그래서 사용하는 방법이 문자열을 배열에 저장한 후에 이를 한번에 입력받아서 각각의 인덱스에 저장하고, 출력할 때도 각각을 연속해서 출력해서 문자열인 것처럼 보이도록 하는 것이다. C언어에서는 포인터를 배열처럼 구현해서 사용할 수 있는데, 이러한 개념을 가지고 문자열을 다룰 수 있다. #include int main() { char c1 = 'a'; // 변수에 문자 'a' 저장 char *s1 = "Hello"; // 포인터에 문자열 "Hello"의 주소 저장 printf("%c\n", c1); // a: %c로 문자 출력 printf("%s\n", s1); // Hello: %s로 문자열 출력 return ..
[ProjectH4C] 코딩도장 Unit 36~38 Write-Up 배열 변수를 여러 개 사용해야 할 일이 생기면 하나씩 선언해주는 것이 여간 귀찮은 일이 아니다. 50명의 학생들의 평균 점수를 구하고자 한다면, 변수를 50개 선언해야 하는데 이는 너무 비효율적이다. 이러한 문제를 해결할 수 있는 것이 배열이다. 배열이란 같은 자료형의 변수들의 나열인데, 반복문과 함께 사용하면 변수가 몇 개가 있든 손쉽게 처리할 수 있는 특성을 가지고 있다. 배열을 선언하는 법은 다음과 같다. 자료형 이름[크기]; 자료형 이름[크기] = {값, 값, 값, 값, ...}; 위는 초기화 없이 선언할 때고, 아래는 선언과 동시에 초기화 해줄 때 사용된다. 만약 정수형 배열 arr를 10개만큼 생성했다고 가정하자. 생성은 int arr[10]과 같이 해야 하는데, 이렇게 하면 10개의 변수가 ..
[ProjectH4C] 코딩도장 Unit 34 ~ 35 Write-Up 포인터 어떠한 값을 저장하기 위해서는 값의 형태에 맞는 자료형의 변수를 선언해야 한다. 변수를 선언하면, 해당 변수는 컴퓨터의 메모리에 만들어진다. 자료형의 크기만큼 메모리에 공간을 할당한 후에, 그 곳에 값을 저장하는 식이다. 우리가 사는 집들 각각에 주소가 다른 것처럼 각각의 메모리 공간에는 서로 다른 주소가 존재한다. 우리는 변수에 접근하기 위해 변수의 이름을 지정하고 이름을 이용해 사용하지만, 메모리 상의 주소를 이용해서 직접적으로 접근할 수 있다. 접근 방법을 설명하기에 앞서, 주소에 관련된 연산자에 대해 알아야 한다. 주소 관련 연산자로는 &(주소 연산자)가 있다. 값과 값 사이에 존재하는 &는 비트 AND연산자이지만, 어떠한 변수 앞에 붙어있는 &는 해당 변수의 주소값을 출력하는 주소 연산자..