C언어 15

[C언어] 15. 파일 입출력

15. 파일 입출력 - 프로그램이 꺼진 이후에도 데이터를 저장하기 위해서는 파일 입출력이 필요하다. - 게임을 껐다 킬 때마다 다시 처음부터 캐릭터를 키워야 한다면 매우 억울할 것이다. ※ 파일이 실질적으로 저장되는 위치는? - SSD (RAM인 CPU같은 경우는 휘발성 있게 저장한다는 특징이 있다. 즉 컴퓨터를 껐다 키면 데이터가 사라진다는 것이다. 그래서 일반적으로 바탕화면에 있는 파일들은 SSD나 하드디스크 같은 보조기억장치에 저장이 되고 그것을 더블 클릭 해서 실행을 하면 그 프로그램이 프로세스로 변환되면서 RAM에 들어가서 구동을 하게 되는 것이다. CPU는 그 RAM에서 하나하나씩 코드를 읽어서 실행을 시켜준다. 따라서, 실질적으로 파일이 영구적으로 저장이 되는 위치라고 한다면 SSD라고 할 ..

[C언어] 14. 구조체

14. 구조체 - 여러 개의 변수를 묶어 하나의 객체를 표현하고자 할 때 구조체를 사용 할 수 있다. - 캐틱터, 몬스터, 학생, 좌표 등 다양한 “객체”를 모두 프로그래밍 언어를 이용해 표현 할 수 있다. struct 구조체명{ 자료형1 변수명 1; 자료형2 변수명 2; …… } (예제1)한 명의 학생에 대한 정보를 담고 있는 구조체를 만들어보자. #include struct Student { char studentId[10]; char name[10]; int grade; char major[100]; }; (해설) 학생에 대한 정보를 담고 있는 구조체를 만들어 본것이다. 학생의 학번, 이름, 학년, 전공 등을 자료형이 무엇인지 판단해서 잘 담을 수 가 있다. - 기본적으로 구조체의 변수에 접근할 때..

[C언어] 13. 함수 포인터

13. 함수 포인터 - C언어에서는 함수의 이름을 이용해 특정한 함수를 호출한다. - 함수 이름은 메모리 주소값을 반환한다.(배열도 주소값 반환하는 것처럼) (예제1) 함수이름이 메모리주소를 반환하는 예 #include void function() { printf("i make a my function."); } int main(void) { printf("%d\n",function); system("pause"); return 0; } (해설) 실행 시켜보면 내가 직접 만든 함수들도 함수이름을 출력하도록 하면 각각 자기의 주소값을 가지고 있는 걸 확인 할 수 있다. - 함수 포인터는 특정한 함수의 “반환 자료형”을 지정하는 방식으로 선언 할 수 있다. - 함수 포인터를 이용하면 “형태가 같은” 서로 “..

[C언어] 12. 동적 메모리 할당

12. 동적 메모리 할당 - 일반적으로 C언어에서 배열의 경우 “사전에” 적절한 크기만큼 할당해주어야 한다. - “프로그램 실행 도중 언제나” 우리가 원하는 만큼만 메모리 할당해서 사용하고자 한다면 동적 메모리 할당을 사용한다. - “동적”이라는 말의 의미는 “프로그램 실행 도중에”라는 의미이다. - C언어에서는 malloc()함수를 이용해 원하는 만큼의 메모리 공간을 확보할 수 있다. - malloc()함수는 메모리 할당에 성공하면 주소를 반환하고, 그렇지 않으면 NULL을 반환한다. (그런 후 포인터 변수를 이용해 해당 주소에 접근해 데이터를 처리하는 등의 작업을 수행할 수 있다.) - malloc()함수는 라이브러리에 정의되어 있다. malloc(할당할 바이트 크기); - 동적 메모리 할당을 수행할..

[C언어] 11. 다차원 배열과 포인터 배열

11. 다차원 배열과 포인터 배열 - 2차원 배열은 굉장히 많은 목적으로 사용된다 - 행렬 데이터를 표현할 때, 그래프 알고리즘을 처리할 때, 다수의 실생활 데이터를 처리 할 때 등 이름 영어성적 수학성적 국어성적 홍길동 85 97 79 유관순 100 89 98 이순신 99 77 99 장보고 89 70 78 신립 95 98 98 ▶ 흔히 우리가 보는 “표 구조”가 “2차원 배열”과 흡사하다. - 2차원 배열은 1차원 배열이 중첩되었다는 의미로 [대괄호]를 두 번 연속하여 쓴다. [ ][ ] 「자료형 배열이름 [행][열]={{값,값,값,…},{값,값,값,…},{값,값,값,…}∙∙∙}」 ex) int a[10][10]; (10x10행렬) - 2차원 배열 또한 0인덱스부터 시작한다. ex) a[0][2] : ..

[C언어] 10. 컴퓨터가 변수를 처리하는 방법

10. 컴퓨터가 변수를 처리하는 방법 - 컴퓨터에서 프로그램이 실행되기 위해서는 프로그램이 메모리에 적재(load)되야 한다. - 프로그램의 크기를 충당 할 수 있을 만큼의 메모리 공간(4기가 ,8기가 ,16기가 등등)이 있어야하는데, 일반적인 컴퓨터의 운영체제는 메모리 공간을 네 가지로 구분하여 관리한다. 코드 영역 데이터 영역 힙 영역 스택 영역 소스 코드 전역 변수 정적 변수 동적 할당 변수 지역 변수 매개 변수 (함수마다포함하고음) - 프로그램의 어디서든 접근 가능한 변수(전체-Global) - main 함수가 실행되기도 “전”에 “프로그램의 시작과 동시에 메모리에 할당” - 프로그램의 크기가 커질수록 전역 변수로 인해 프로그램이 복잡해 질 수 있다. - 메모리의 데이터(Data)영역에 적재된다...

[C언어] 9. 문자열

9. 문자열 - 말 그대로 문자들의 배열이다 - 문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL)값을 포함한다.(NULL: 컴퓨터상에서 존재하지 않는다. 즉, 어떠한 값도,의미 있는 값이 들어가 있지 않다.) - NULL값이 들어가는 이유는 문자열의 끝을 알리는 목적으로 사용된다.(\0) - printf문을 실행하면 컴퓨터는 내부적으로 NULL값을 만날 때 까지 출력한다. - 문자열 형태로 포인터를 사용하면 포인터에 특정한 문자열의 주소를 넣게 된다. - 문자열을 읽기 전용으로 메모리 공간에 넣은 뒤에 그 위치를 처리한다. - 문자열 리터럴(“”큰 따옴표 안에 어떠한 문자열이 들어가는 구조) 자체는 변경이 불가능하다. 문자열을 바꾸고 싶으면 포인터가 가리키고 있는 문자를 바꾸면 된다. (예제1)포..

[C언어] 8. 문자

8. 문자 - C프로그램의 문자는 아스키 코드(Ascii Code)를 따른다 - 아스키 코드는 0부터 127까지 1바이트로 구성되며 주요 문자를 출력하도록 해준다 0: 48~9:57 A: 65~Z: 90 (각 소문자와 대문자의 차이는 32이다) a: 97~z:122 숫자,대문자,소문자의 기본적인 아스키코드는 기억하자!!(숫자,대문자,소문자 순으로 아스키코드가 크다) (예제1) 아스키코드값이 어떤 문자를 가질까 #include int main(void) { char a = 65; printf("%c\n",a); system("pause"); return 0; } (해설) 변수의 자료형은 char이고 캐릭터형 자체에 숫자를 넣어서(char a=65;) 처리를 할 수 있다. printf문에서는 형식 지정자로 ..

[C언어] 7. 포인터

- 포인터에서부터 사람들이 C언어를 어려워하는데 전혀 어려운 내용이 아니다! 인터넷에도 포인터에 대한 자료도 풍부하다. 향후 훌륭한 프로그래머가 되려면 이 '포인터' 공부를 제대로 해놓으면 빛을 볼 수가 있다. 웹개발이나 앱개발 쪽에서는 굳이 몰라도 큰 상관이 없긴 한데, 코어 모듈 개발도 우리는 할 수 있어야 한다! 자 그럼 시작해보장 v^___^ 7. 포인터 - 지금까지의 변수는 "그 자체로 자신의 자료형에 맞는 값"을 저장한다. ex) int,double 등등 - 포인터(Pointer)변수는 “특이한 변수”로, “메모리 주소”를 저장한다. ex) int형 변수를 만들 때, 이 변수의 위치값을 가르키는 int형 포인터가 존재할 수 있는 것이다. 포인터는 *(별표시)로 이용해서 나타낼 수 있다. (in..

[C언어] 6. 배열

6. 배열 - 3개의 숫자가 있을 때 가장 큰 숫자를 구하는 프로그램을 작성한다고 하면, 기본적으로 변수의 이름을 a,b,c로 설정하면 된다. 하지만, 숫자가 100개라면 어떻게 처리할 수 있을까? ▶비효율적이긴 하지만 변수 100개를 초기화 시킬 수 있다.(만들어서 선언할 수는 있다. 정말 비효율적) 하지만, 숫자가 100만개라면..? ▶ 일일이 변수를 만들어서 처리할 수 없을 것이다. 따라서, “동일한 자료형”을 “여러 개 담는 기술”이 필요한데, 이것이 바로 배열이다! - 배열을 사용하면 동일한 성격의 데이터를 다수 표현할 수 있다. 배열의 선언 자료형(double, float, int 등등) 배열명 [배열의 크기]={초기화 값}; - 배열의 크기는 배열의 개수라고 생각하면 된다 - 초기화 값은 있..

반응형