C 13

[TeamH4C_C언어] 포인터 연산

포인터를 사용해왔는데 포인터끼리의 연산은 어떤 방식으로 진행되는지 알아보겠습니다. 포인터로 선언한 변수에는 메모리 주소가 들어있습니다. 그렇기에 이 포인터 변수에 연산을 진행하게 되면 메모리 주소에 일정 숫자들을 연산하게 되는 것입니다. 즉, 포인터 연산은 메모리 주소를 옮겨 다니기 위해 사용됩니다. 메모리 주소가 커지는 상황을 순방향으로 이동(forward), 메모리 주소가 작아지는 상황을 역방향으로 이동(backward)라고 하면 forward는 0xFFFFFFFF로 이동하는 것이고 backward는 0x00000000로 이동하는 것으로 알고 있으면 됩니다. 포인터 연산은 *와 /는 사용할 수 없습니다. 대신, 아래와 같은 연산은 가능합니다. 포인터 + 값 포인터 - 값 포인터++ 포인터-- ++포인..

[TeamH4C_C언어] 열거형과 자료형 변환

이번에는 코딩도장 Unit57과 Unit58에 설명되어 있는 열거형 사용과 자료형 변환에 대해 정리해보겠습니다. 열거형 사용 enum사용 switch문 결합 사용 for문 결합 사용 자료형 변환 기본 자료형 변환 포인터 자료형 변환 구조체 자료형 변환 열거형 사용 열거형은 정수형 상수에 이름을 붙여 개수가 많더라도 편리하게 해 주도록 합니다. enum키워드를 사용하며 enumeration의 약자입니다. enum 열거형이름 { 값1 = 초깃값, 값2, 값3 }; [enum 열거형이름 변수이름;]으로 변수를 선언해야 사용이 가능하며 아래에 내려오는 값들은 1씩 증가하여 자동으로 초기값이 할당됩니다. 초기값을 할당하지 않으면 0부터 시작하는 규칙이 있습니다. 열거형의 값들은 대문자만 이용하는 경우가 많고 단어..

[TeamH4C_C언어] 구조체 추가 정리(비트 필드)

지금까지 멤버가 각 자료형 크기만큼 공간을 차지하는 것을 확인했다면 지금부터 비트 필드를 사용하여 비트 단위로 저장시키는 것을 알아볼 것입니다. struct 구조체이름 { 정수자료형 멤버이름 : 비트수; }; 위의 형식이며 비트 수 부분에 비트 크기를 지정하여 저장하도록 합니다. 2진수 형태로 1 글자당 1비트로 하여 숫자를 저장할 수 있습니다. 비트 수를 초과하게 된다면 나머지 비트에 해당하는 값은 버려지고 남은 값들만 출력되게 됩니다. 또한, 비트 필드의 각 멤버는 최하위 비트(Least Singnificant Bit, LSB)부터 차례대로 배치됩니다. 여기서, 비트 필드의 멤버를 선언하는 자료형보다 큰 비트 수는 에러가 발생하기에 지정할 수 없습니다. 공용체와 함께 사용하게 된다면 구조체에서 각 비..

[TeamH4C_C언어] 구조체와 공용체 사용

구조체가 메모리에 올라갈 때의 이용과 구조체와 정의 방법은 같지만 멤버 지정방식이 다른 공용체에 대해 정리해보겠습니다. 구조체의 사용과 활용 구조체 멤버 정렬 구조체 메모리 활용 ( 초기화, 복사 ) 구조체 배열 사용 공용체의 사용 공용체의 시작 구조체와 공용체의 활용 구조체의 사용과 활용 구조체가 메모리에 올라갔을 때 멤버를 정렬하는 기능으로 메모리에 접근할 때 비트에 따라 바이트 단위가 다르게 접근됩니다. 32비트 CPU일 때는 4바이트 단위, 64비트 CPU는 8바이트 단위로 접근합니다. 32비트 CPU에서 4바이트보다 작은 데이터에 접근할 경우 내부적으로 시프트 연산이 발생하여 효율이 떨어진다 합니다. 그렇기에 효율성이 좋도록 적절한 데이터 크기인 2, 4, 8, 16바이트 형식으로 정렬을 하게 ..

[TeamH4C_C언어] 문자열과 구조체

안녕하세여! 이번 정리는 문자열을 배열에 저장하거나 포인터 문자열 출력을 해보도록 하겠습니다. 문자열 문자열의 초기화 문자열 입력하여 저장 문자열의 확장기능 문자열 길이 문자열 비교 문자열 복사 문자열 붙여넣기 문자열로 변환 문자열 검색 문자열 자르기 문자열 정수, 실수로 변환 회문, N-gram 간단한 회문과 N-gram 설명 구조체 구조체 정의 구조체 별칭 구조체 포인터 간단한 구조체 예제 문자열의 사용 C언어에서 문자열을 사용하기 위해서는 아래와 같이 기본적인 형태로 문자열을 선언하거나 초기화가 가능합니다. #include int main() { char* ptr1 = "string"; char* ptr2[] = { "string" }; char arr1[] = "string"; char arr2[..

[TeamH4C_C언어] 포인터를 활용한 문제

이번에 CodeUp에 나와있는 문제들을 포인터를 사용하여 풀어보겠습니다. 문제는 순서대로 1차원 배열 동적 할당, 2차원 배열 동적 할당, 특정 조건의 수 출력, 함수를 이용하여 비교출력, 특정 순서로 출력의 문제를 풀어봤습니다. 문제풀이 1차원 배열 문제로 배열의 형태가 아닌 포인터 형태로 나타내기 위해 malloc함수를 사용하여 동적 할당 형식으로 변수를 생성하고 변수를 역참조하며 값을 입력하는 방식으로 각각의 주소에 값을 넣어 입력값을 입력받았습니다. 그 후, 가장 빠른 번호를 출력시키기 위해 임시 저장 변수에 첫 번째 포인터의 값을 저장시킨 후 비교하여 가장 작은 값을 출력하도록 코드를 작성할 수 있습니다. 이번에는 2차 배열 문제로 이중 포인터를 사용하여 2차 배열의 형식을 만들어 문제를 풀었습..

[TeamH4C_C언어] 포인터의 활용

이번에는 C언어에서 사용되는 포인터에 대해 정리하겠습니다. 포인터는 주소 값을 이용하는 변수로서 애스터리스크(*)를 이용하여 가리키는 곳의 주소를 활용할 수 있습니다. 이번 정리에서는 아래와 같은 주제로 정리되어 있습니다. 포인터 단일 포인터 다중 포인터 메모리 동적 할당 메모리를 특정 값으로 초기화 배열 1차원 배열 2차원 배열 배열과 포인터의 응용 포인터의 사용 값을 변수에 저장하면 메모리 공간에 할당하는 방식으로 저장이 됩니다. 변수는 메모리의 특정 장소에 위치함으로 메모리 주소로도 표현할 수 있습니다. 변수의 메모리 주소를 구할 때 변수 앞에 주소 연산자(&)를 붙이고 서식 지정자를 pointer를 뜻하는 %p로 지정하거나 16진수 형태로 출력(%x)하면 메모리 주소를 확인할 수 있습니다. 이때,..

[TeamH4C_C언어] 다시 정리하는 CodeUp

이번에는 CodeUp에서 파이썬으로 풀었던 기초 100제 문제 중 가장 기억에 남았던 문제를 C언어로 풀어보았습니다. 크게 반복문, 조건문, 연산, 배열에 대해 정리하였습니다. Memorable CodeUp 첫 번째 문제로 기초 100제의 1079번 문제입니다. 입력이 반복되며 문자 'q'가 입력될 때까지 문자를 출력하는 문제입니다. 이 문제는 입력을 한 번은 무조건 받아야 하는 문제여서 반복문 중 do while반복문을 사용하여 푼 문제입니다. 반복 코드를 무조건 한번 실행하는 형식으로 기억에 남던 문제입니다. 문제의 풀이는 아래와 같습니다. 문자의 자료형인 char 변수를 선언하고 do while반복문을 활용하는 방식입니다. 여기서 scanf() 함수 뒤에 getchar() 함수가 이용되었는데 get..

[TeamH4C_C언어] 반복의 loop

반복되는 코드를 직접 작성하는 것은 불가능에 가깝고 가능하더라도 복잡한 코드가 될 것입니다. 그렇기에 프로그래밍 언어에서는 반복문이라는 것을 통해 반복되는 코드를 간단하게 작성할 수 있도록 도와줍니다. 반복문의 시작에 앞서 값에 따라 원하는 코드가 실행되는 조건문에 대해 정리하고 반복문에 대해 정리하겠습니다. switch 조건문 if와 else는 조건식이 참 또는 거짓일 때 처리가 가능하였지만, 두 가지 조건 말고 다양한 조건일 때 처리할 수 있는 조건문이 switch조건문입니다. switch 분기문은 조건이 많을 때 유용하며, 기본형식은 다음과 같습니다. switch(판별되는 값, 변수) { case 1: 코드; break; case 2:// 값이 2와 3일 때의 코드 실행 부분이 같을 때 처리방법 c..

[TeamH4C_C언어] 언어의 계산

이번에는 연산에 대하여 정리하겠습니다. 일반적인 수학 연산과 비슷하며 몇몇의 내용만 프로그램적인 내용이 존재합니다. 사칙연산 덧셈과 뺄셈, 일반적인 연산의 경우 계산의 결과대로 출력됩니다. 계산에서 오차가 생길 수 있는데 더 큰 자료형으로 선언하거나 자료형에 맞도록 계산하면 됩니다. 프로그래밍에서는 변수의 값에서 하나의 값을 더하거나 뺄 수 있으며 여러 가지 계산을 활용할 수 있습니다. 변수 = 변수 + 값의 형태로 자기 자신의 값을 변화시키는 형식입니다. 식을 단축하여 [변수 += 값;]의 형태로 단축이 되며 다른 연산도 가능합니다. 여기서, 여러 연산이 있을 때, 연산의 순서는 다음과 같습니다. 증가 감소 연산을 간단히 표현할 수 있는데 증가, 감소 연산자를 통해 가능합니다. ++, --를 통해 정수..