C언어 Chapter 28. 연결리스트에 많이 사용되는 함수 연결리스트를 인수로 넘겨받아 내용을 출력하는 함수 void print_list (NODE *head) { if (head == NULL) { printf("NULL\n"); } else { printf("%c ==> ", head -> data); print_list (head -> next); } } 연결리스트의 노드의 개수를 헤아리는 함수 int count (NODE *head) { if (head == NULL) { return 0; } else { return (1 + count (head -> next)); } } 연결리스트의 메모리를 해체하는 함수 void loop_free (NODE *head) { NODE *temp, *curre..
C언어 Chapter 27 💡 static 변수의 메모리 주소는 컴파일시에 주소값이 고정된다. 실행될 때 만들어지는 주소는 다이나믹 변수이고, (heap, stack), 실행되기 전에 만들어 지는 주소는 전역변수다.(code, data, BSS) 구조체를 가리키는 포인터 변수 STUDENT *sp; 구조체 를 가리키는 포인터변수는 일반 포인터 변수와 동일하다. ap->age = 20; 포인터 변수로 구조체에 접근할 때는 도트표기대신 화살표를 사용. (*sp).age; 위 와 동일하지만 일반적으로 화살표를 많이 사용한다. 🔔 Ex) 데이터 파일에서 키와 몸무게를 읽어 비만을 체크하는 프로그램 💡 프로그램 설명 sp->name 위와 같은 구조체 포인터 사용법에 중점을두고 소스를 분석 할 것 [ d9-5.da..
C언어 Chapter 26. 💡 구조체 내부에서 빈 메모리공간을 사용하지 못하도록 사용하지 않는 char형 배열로 막아버리는 형태 typedef struct EMB { int A; char B; char pad[3]; // 사용하지 않는 메모리 공간을 막는 변수 int C; } emb; [위 소스의 메모리 형태] int A char B char pad[3] int C 구조체 초기화(복습) typedef struct EMB { int A; char B; char pad[3]; int C; }emb; 위 소스는 main 문에서 다음과 같이 초기화 할수 있다. int mian( ) { emb A; emb B = {0, 0,{1, 2, 3}, 100} return 0; } typedef struct EMB 구조..
C언어 Chapter 25. 문자 함수 문자를 다루는 라이브러리 함수의 헤더파일이 에 정의되어 있다. 문자가 특정부류에 속하면 참을(1), 아니면 거짓(0)을 봔환. 🔔 예) 문자 함수를 사용한 프로그램의 예 #include #include int main() { if(isalnum ('a')) { printf("\'a\' is alphnum\n"); // 'a' is alphnum } else { printf("\'a' is not alphnum\n"); } if(iscntrl ('\5')) { printf("\'5\' is aplhnum\n"); // '\t' is cntl } else { printf("\'5\' is not aplhnum\n"); } if(iscntrl ('\t')) { print..
C언어 Chapter 24. 문자열 함수들 문자열 함수는 파일을 #include문을 이용해서 포함시켜 사용한다. int strlen (char *s) 문자열의 길이를 세어주는 함수이다. int strcmp (char *s1, char *s2) cmp : compare 약자 ( 비교 ) 두 문자열의 사전상(아스키코드)의 위치를 비교한다. 문자열 s1과 s2의 사전상의 위치가 s1아 s2보다 빠르면 음수, s1과 s2가 같으면 0, s1이 s2보다 뒤에 오면 양수를 돌려준다. Ex) strcmp함수 구현 결과 : "123", "1235" 를 한자리씩 비교하여 4째자리인 NULL과 5를 비교하여 함수내부에서 0(NULL) - 5..
C언어 Chapter 23. void * void : 값을 회피하다. ( void 는type아니다. 즉 변수 type으로 사용할수 없다. ) void * (type 이다) : 4byte 를가지는 포인터를 뜻한다. ( void * 는type 이다. 변수 type로 사용할수 있다.) void * 는 가리키는 대상의 type 을 가리지 않고 가리킬 수 있다. ( 자료형이 정해져있지 않음으로 모든 자료형을 가릴킬 수 있다.) 주소를 가릴킬수 있지만 대상의 값을 읽거나 쓸수는 없다. 캐스팅을 이용하여 읽거나 쓰는 것이 가능하다. 🔔 예) *(int *)vp 🔔 예) void *의 사용 🎯 프로그램 설명 void *는 자료형 int, char, float 등 을 가리지않고 가리킬수있다. void * 만으로 값을 읽..
C언어 Chapter 22. 문자열 문자열 상수 문자열은 문자형 배열이다. 문자형 상수는 작은따옴표로 표시한다. 문자열 상수는 큰따옴표로 표시한다. 💡 문자열은 존재하지 않는다. 문자배열이 존재한다. 집합 관계에서 문자열은 문자 배열에 포함된다. 문자 상수 : 'a', '3', '%', '+' 문자열 상수 : "This is a string." 문자 상수는 1byte 이다. 문자열은 컴파일러에 의해 자동적으로 맨마지막에 NULL문자('\0')가 들어간다. "This is a string." 문자열 type은 (const char *) 변하지않는 주소값이다. 문자열 상수 "string" 를 넣었을 때 메모리 🔔 예) 문자열의 길이를 알아보는 프로그램 🎯 프로그램 설명 size = sizeof("string..
C언어 Chapter 21. 다차원 배열 과 포인터의 관계 포인터는 1차원 배열은 가르킬 수 있지만, 다차원 배열은 가르킬수 없다. 🔔 예) 🎯 프로그램 설명 3차원 배열을 포인터 p(1차원) 로 출력한경우 결과 : warning 메시지는 뜨지만 1을 출력 한다. 하지만, *(p+1) 을 해보면 포인터 p는 1차원 이동만하는 것을 알수있다. 🔔 예) 포인터는 함수 인자로 사용하면 3차원배열을 이동 증명 🎯 프로그램 설명 p는 1차원 이동이라 p + 12 일때 77자리의 주소가 BFFFF998 이다. 함수 인자로 사용한 p3 는 p + 1 일때 BFFF998에 포인터크기와 동일한 4Byte이다. 즉 함수 인자로 사용하면 포인터로 3차원배열을 가리킬수있다. 결과 : mian 함수의 포인터 p는 1차원적 이동..