C프로그래밍/개인 공부

C프로그래밍/개인 공부

C언어 - 동적 메모리

동적 메모리란? 프로그램이 메모리를 할당하는 방식에는 2가지 방법이 있다. 우리가 처음부터 써왔던 방법은 '정적 메모리 할당(static memory allocation)'이다. '정적 메모리 할당'은 미리 정해놓은 만큼의 메모리를 할당받는 것이다. 이 방법은 간편하지만 단점이있다. 공간의 낭비가 있을 수 있기 때문이다. 예를 들어서, 학생들 성적을 저장하기위해서 미리 100개의 정수를 저장할 수 있는 배열을 만들었다고 가정해보자. int scores[100] 하지만, 이 배열에 70명의 학생의 성적만이 입력된다면, 나머지 30개의 공간은 낭비되게 된다. 그렇다면 필요한 공간만 그때그때 할당받으면 메모리를 더욱 효율적으로 사용할 수 있게된다. 이것이 '동적 메모리 할당(dynamic memory allo..

C프로그래밍/개인 공부

C언어 - 열거형(enumeration)

열거형(enumeration)이란 변수가 가질 수 있는 값들을 나열해 놓은 자료형이다. 즉, 변수가 가질수 있는 상수값들을 나열해 놓은 자료형. 열거형으로 선언된 변수는 나열된 변수만 가질 수 있다. 예를 들어서, 요일을 나타내는 변수를 d라고 했을때, d는 월, 화, 수, 목, 금, 토, 일 만을 변수로 가질 수 있다. 그렇다면 열거형은 왜 쓰는가? 방금 전의 예처럼 월요일은 0, 화요일은 1, 수요일은 2 이런식으로 나타낼 수 있지만, 이렇게 하게 된다면 오류의 가능성, 가독성이 좋지않은 문제가 있다. 그렇기 때문에 MON, TUE, WED처럼 기호상수로 정의하는게 바람직하다고 볼 수 있다. 그렇다면 열거형을 한번 정의해보자. 예를 들어 요일을 나타내는 열거형을 정의해보면, 1 2 3 4 5 6 7 ..

C프로그래밍/개인 공부

C언어 - 구조체와 함수

구조체와 함수 구조체는 함수의 인수로도 사용이 가능하고 반환값으로도 사용가능하다. 구조체를 함수의 인수로 넘길때는 "값에 의한 호출"을 사용하게 된다. "값에 의한 호출" 즉, 복사를 사용하는 방법을 예제를 통해 알아보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include struct student { int num; char *name; float grade; }; int equal(struct student s1, struct student s2) { if(s1.num == s2.num){ return 1; } else{ return 0; } } int main(void) {..

C프로그래밍/개인 공부

C언어 - 구조체안에 문자배열? or 문자형을 가르키는 포인터?

1 2 3 struct{ char name[20]; }; cs 이렇게 하면 구조체 내부의 문자배열 name[20]에 문자열이 저장된다. 즉, 20바이트의 저장공간이 구조체 내부에 할당된다. 1 2 3 struct{ char *name; }; cs 이렇게 문자형을 가르키는 포인터를 선언하면, 문자열은 문자열 상수들이 모여있는 공간에 저장된다. 구조체 내부에는 포인터 name을 위한 1바이트만 할당되게 된다. 즉, 문자열을 위한 공간이 구조체 내부에는 없다. 문자열을 저장할 수 없다. 어딘가에 문자열이 이미 저장되어있을 경우에만 가르키면서 사용할 수 있다. 1 2 3 4 5 struct student{ char *name; }; struct student s; scanf("%s", s.name); cs 따라..

C프로그래밍/개인 공부

C언어 - 구조체와 포인터

구조체를 가르키는 포인터 지금까지는 포인터로 변수만을 가르켰다. 포인터는 구조체도 가르킬 수 있다. 구조체 포인터는 다음과 같이 만든다. 1 2 3 4 struct student s = {"2291048", "jin", "4.3"}; struct student *p; p = &s; Colored by Color Scripter cs 구조체 변수 s를 생성하고, student구조체를 가르킬 포인터 p를 만든다. 그리고 포인터 p에 구조체 변수 s의 주소를 넣어준다. 그리고 포인터 p가 가르키는 구조체의 멤버로 접근하려면 1 (*p).number cs 이렇게 '포인터가 가르키는 것'의 멤버 number 혹은 1 p->number cs 간단하게 이렇게 표현해도 된다. 그러면 멤버로 접근하는 간단한 예제를 보자..

C프로그래밍/개인 공부

C언어 - 문자열을 정수로, 정수를 문자열로 바꾸기

프로그래밍을 하다보면 문자열을 정수/실수로 바꾸거나 정수/실수를 문자열로 바꿔야하는 경우가 존재한다. atoi, atof 함수사용, sscanf, sprintf 함수를 사용하는 방법이 있다. sscanf, sprintf사용 1)sscanf() : 문자열로부터 읽어서 지정된 형식에 따라 변수에 저장한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 #include int main(void) { char s1[] = "100 200 300"; char s2[20]; int value; sscanf(s1, "%d", &value); //s1에서 읽어서 %d형식으로 value에 저장 printf("%d", value); //value를 출력 return 0; } Colored by Color Scrip..

Jminu
'C프로그래밍/개인 공부' 카테고리의 글 목록 (2 Page)