C언어

14

C언어의 기본적인 강좌?를 마치며..

중간에 글을 정리하는 방법도 여러 번 바꿨는데, 그냥 지금이 제일 무난한 듯 싶습니다. 하다가 안하다가 해서 긴 시간이 걸렸지만 C++에서는 꾸준히 올리도록 하겠습니다. register 키워드 같은 건 안썼지만 레퍼런스 참고하셔도 충분합니다. C99부터 많이 생겨났지만 어차피 전 C++을 쓰기에 안올릴겁니다. https://en.cppreference.com/w/c/keyword C keywords - cppreference.com This is a list of reserved keywords in C. Since they are used by the language, these keywords are not available for re-definition. The most common keyword..

프로그래밍/C 2019.05.29 Plorence

C 공용체(Union)

공용체(Union Type) 구조체는 struct라는 키워드를 사용해서 정의하는 반면, 공용체는 union이라는 키워드를 사용해서 정의합니다. 유니온이라고 읽습니다. 공용체는 일반적으로 잘 쓰이지 않습니다. 정의와 선언 union uPoint { int xpos; int ypos; }; 정의에서 구조체와 차이점이라면 키워드 struct 대신에 union을 사용합니다. 그 외에는 동일합니다. 변수 선언할때는 struct대신에 union 키워드를 쓰면 됩니다. 구조체와 차이점 각각의 변수가 메모리 공간에 할당되는 방식과 접근의 결과에는 많은 차이가 있습니다. struct sPoint { int xpos; int ypos; }; union uPoint { int xpos; int ypos; }; 위의 구조체와..

프로그래밍/C 2019.05.29 Plorence

포인터의 포인터(이중 포인터)에 대한 이해

보통 그냥 포인터라고 하면 포인터를 선언할 당시에 *연산자가 하나만 쓰입니다. 선언할 때 *연산자를 더 늘려서 이중, 삼중까지 가능합니다. 영어로는 더블 포인터,트리플 포인터라고 부릅니다. 이중 포인터 이중 포인터는 그나마 쓰이지만 삼중 포인터는 잘 안 쓰입니다. 이중 포인터는 2차원 배열이나 포인터 그자체를 다뤄야 할 때 많이 쓰입니다. 이중 포인터 선언 Type ** Name; *연산자 1개 더 붙여주면 됩니다. 이중 포인터에 대한 이해 이중 포인터를 이해하려면 단일 포인터와 *연산자를 빠삭하게 이해하고 있어야 합니다. #include int main(void) { int num = 10; int * ptr = # int ** dptr = &ptr; } 하나씩 어떠한 값을 가지고 있는지 알아봅..

프로그래밍/C 2019.04.18 Plorence

C언어 다차원 배열

다차원 배열 C언어에서 1차원을 배우다 보면 다른 차원도 있다고 생각하실 겁니다. 크게 3차원까지 있는데 3차원도 잘 안 씁니다. 더 나아가 배열의 크기만 안 넘는다면 4차원 이상도 가능합니다. 2차원 배열 2차원 배열은 그대로 면 형태를 이루고 있습니다. 2차원 배열의 선언 방식 TYPE 배열이름[세로길이][가로길이]; 이때 배열의 사이즈는 세로길이*가로길이가 되겠습니다. 2차원 배열을 선언과 동시에 초기화 하는 방법 초기화 리스트 안에는 행 단위로 초기화할 값들을 별도의 중괄호로 명시합니다. int arr[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; 아래는 결과입니다. 1|2|3 4|5|6 7|8|9 채워지지 않은 빈공간(초기화를 하지 않은 배열 원소)은 0으로 초기화됩니다...

프로그래밍/C 2019.04.18 Plorence

상수 형태의 문자열을 가리키는 포인터

배열에서도 문자열을 다룰 수 있듯이, 포인터에서도 가능합니다. 포인터에서 동적 할당을 사용하여 읽기/쓰기 전용으로도 가능하지만, '읽기' 전용이 필요한 경우에 동적 할당을 쓰지 않고 "상수 형태의 문자열"을 사용해도 됩니다. 문자열 시점에서 배열과 포인터가 다른 점 char str[] = "my string"; char * str2 = "Your string"; 첫 번째 줄인 배열은 배열을 기반으로하는 '변수 형태의 문자열'입니다. 포인터를 기반으로 문자열을 선언하는 것도 가능합니다. 두 번째 줄인 포인터는 메모리공간을 수동으로 만들어주지 않았기 때문에 "Your string"이라는 문자열은 자동으로 할당되고 문자열의 첫문자 Y의 주소값이 반환이 되어 str2에 대입됩니다. Y의 메모리주소가 반환이 되어..

프로그래밍/C 2019.04.17 Plorence

C언어 포인터

C언어의 꽃, 포인터(Pointer) 포인터는 C언어의 꽃이라고 할 수 있으며 정말 많이 쓰입니다. 변수는 메모리 영역에 저장돼있고 메모리 주소는 이 변수가 메모리 영역 중 어디에 위치해있느냐를 나타냅니다. 이 메모리 주소를 가지고 포인터를 사용하여 읽기/쓰기가 가능합니다. 포인터 변수란 메모리의 주소 값을 저장하기 위한 변수입니다. 포인터의 개념 "포인터는 어렵다"는 써먹기 어려운 거지, 개념 자체는 매우 쉽습니다. 이점은 C언어의 다른 문법에도 어느 정도 해당하는 말입니다. 변수가 메모리에 할당될 때 어디에 위치해있냐를 알기 위해 특별한 연산자가 제공됩니다. 포인터는 이 위치 값을 참조하여 접근해서 읽기/쓰기를 하는 겁니다. 예로 하나 들어보자면 청와대라고 하면 정확히 위치가 어디인지 모르시는 분이 ..

프로그래밍/C 2019.04.17 Plorence

C언어 포인터와 배열의 관계

배열의 이름은 포인터입니다. 단 그값을 바꿀 수 없는 '상수 형태의 포인터'입니다. 들어가기 전에,서식문자 %p 는 주소값의 출력에 사용되는 서식문자입니다. 포인터와 배열의 관계 배열 원소에 접근할때 내부에서 포인터를 사용합니다.12345678910#include int main (void){ int arr[3] = {0,1,2}; printf("%p \n",arr); printf("%p \n",&arr[0]); printf("%p \n",&arr[1]); printf("%p \n",&arr[2]); return 0;} 출력결과는 다음과 같습니다.1234000000000062FE40000000000062FE40000000000062FE44000000000062FE48 (해당 결과는 PC마다 다름. 참고용..

프로그래밍/C 2019.03.19 Plorence

C언어 배열 (1차원만 설명)

배열 배열은 다수의 데이터를 저장하고 처리하는 경우에 유용하게 사용할 수 있는 것이 배열입니다.12345678#include int main (void){ int floor101,floor102,floor103,floor104; //배열 미사용시 int floor201,floor202,floor203,floor204; //배열 미사용시 int oneFloArr[4]; //배열 사용시 int twoFloArr[4]; //배열 사용시} 장점은 코드가 간결해지며,편리합니다. 만약 변수 1000개가 필요한다면 언제 1000개를 다만들까요? 아마 만들다가 그만둘겁니다. 1차원 배열 선언에 필요한 것 배열이름 자료형 길이정보 (반드시 상수여야 함.) 선언시1자료형 배열이름[길이정보]; 로 선언합니다. 1234567..

프로그래밍/C 2019.03.19 Plorence

C언어 재귀함수

재귀 함수(Recursion Function) 재귀함수는 자기 자신을 다시 호출하는 함수를 의미합니다.123456789101112#include void helloworld (int num){ if(num

프로그래밍/C 2019.02.24 Plorence

C언어 goto문

goto문 goto의 의미는 프로그램의 흐름을 원하는 위치로 이동 하는겁니다. goto문은 코드를실행하다가 goto문을만나면 지정한 레이블로 넘어갑니다. goto rabbit: 을하면 rabbit:이 위치한 레이블로 이동하여 아래의코드를 실행합니다. 그럼 그전의 코드는 실행되지 않습니다. goto문에 대해서 논란도 많았습니다. 가장큰원인은 프로그램의 자연스러운 흐름을 방해하기 때문입니다. C언어와 같은 절차지향 프로그래밍 언어에서는 흐름을 복잡하게하거나 방해하는것은 아주 큰 단점 이기 때문입니다. 결국 goto문의 사용은 가급적 자제하거나,아예 사용하지말자는 결론을 내렸습니다. 물론 적절하게 써주면 좋습니다.1234567891011121314151617181920#include int main(void)..

프로그래밍/C 2018.12.14 Plorence

C언어 반복문,for문

for문 for문은 보통 시작전에 반복횟수를 미리 알고있을때 주로 사용합니다. while문과 반복한다는 점에서는 똑같다고 생각할 수 있지만 while문은 필요한 조건식이 1개에 비해 for문은 3개가 필요합니다.1234567891011121314#include int main(void){ int num1 = 0; while(num1

프로그래밍/C 2018.12.03 Plorence

C언어 반복문,do~while문에 대해

while문과 do~while문의 차이점은 크게 없지만 차이점이라면 반복의 조건을 검사하는 시점입니다 while문은 조건을 검사하고 그게 참이면 실행이지만 do~while문은 일단 조건은 나중에따지고 먼저 코드실행후 조건을검사합니다. 정리하자면 while문은 선조건검사 후코드실행 do~while문은 선코드실행 후조건검사 do~while문 do~while문은 앞서 설명드렸지만 선코드실행 후조건검사의 반복문입니다. 먼저 코드를 실행한후 계속 반복할것인지 안할것인지 조건검사를합니다. 조건이 거짓이라면 반복문을 탈출합니다. 제가 이렇게 텍스트로 설명하는거보다 예제를 통해서 설명하는것이 이히에 더 도움될것같네요. 1234567891011121314151617#include int main(void){ int nu..

프로그래밍/C 2018.09.13 Plorence