본문 바로가기

C언어/복습

(18)
[C언어]DAY19_구조체와 리스트, 열거형 상수, 구조체와 함수의 인수 구조체와 리스트 : 단일연결리스트 : singly linked list (링크드 리스트) 리스트 : 데이터 구조 (데이터 여러개. 배열도 데이터 구조) 유연한 데이터 관리가 가능 (배열과 비교) 1. 리스트 중간에 새로운 데이터 추가/삭제 2. 리스트의 크기를 동적으로 관리 #include #include #include #define MAX 100 typedef struct s_Student{ int id; char subject[MAX]; struct s_Student* next; //자기 자신을 가리키는 포인터 } Student; //3개의 Student를 가지고 리스트를 만들어 본다. int main(){ //1. 포인터 선언 Student* student1 = 0; Student* student..
[C언어]DAY18_ 구조체 배열, 구조체 포인터, 구조체 동적할당 구조체 배열 : 구조체는 사용자가 정의한 타입. (char같은 타입을 내가 만들었다는 의미) #include #define SIZE 3 #define MAX 100 //구조체 typedef A B : A를 B로 부른다. typedef struct s_Student { //멤버 int id; char subject[MAX]; } Student; int main(){ int i = 0; //구조체 배열을 선언과 초기화 Student student[SIZE] = { {1111, "art"}, {2222, "math"}, {3333, "biology"} }; printf("%d\n", sizeof(student[i].subject)); //입력 : scanf for( i = 0; i student.id = p_..
[C언어]DAY17_동적 메모리 할당(문자열이 여러개인 경우), 구조체 선언 동적 메모리 할당 //문자열이 여러개인 경우 메모리의 동적 할당 //문자열을 다룰 때 null을 저장해야하므로 +1을 고려하여 할당해야 함. #include #include #include #define MAX 20 int main(){ //1. 포인터 선언 char* p_char =0; int i = 0; //2. 메모리 할당 char* a = "welcome"; char* b = "to"; char* c= "Neverland"; //포인터배열 a = (char*)malloc(sizeof(char)*MAX); b = (char*)malloc(sizeof(char)*MAX); c = (char*)malloc(sizeof(char)*MAX); //a = "hello"; FATAL ERROR! 심각한 에러!..
[C언어]DAY16_동적 할당, 동적 배열 동적메모리 할당(dynamic memory allocation) 동적메모리 할당이란 ? : 실행 도중(run-time)시 사용할 메모리 공감을 할당 /반대개념: 정적메모리 할당: 컴파일시 사용할 메모리 공간 할당. 변경불가. Heap메모리 Stack메모리 구분. 1. 컴파일시 메모리 공간 할당영역: 1) 데이터영역(전역변수, 리터럴(상수"hello word")저장공간)과 2) 스택영역에 할당되는 메모리 공간 2. run-time시 메모리 공간 할당영역 Heap영역: 실행도중 사용자가 직접 메모리 할당. //malloc() 함수: 안에 선언되어있음. 메모리 할당시 호출하는 함수 반환값으로 주소값을 반환. 주소값: 힙영역에 할당된 메모리 공간의 첫번째 주소 따라서 malloc()의 반환값은 포인터로 받아야 ..
[C언어]DAY15_ 포인터 배열, 더블포인터, 문자열 표준 라이브러리 포인터 배열, 더블포인터 : 포인터를 원소로 갖는 배열 //문자열을 위한 문자열 포인터 배열 #include #define SIZE 3 int main(){ int i =0; //여러개의 문자열을 선언하는 방법: 문자열 포인터를 이용하여 //비교 : 2차원배열로도 선언할 수 있다. char* arr[SIZE] = {"Spring","comes", "soon"}; //포인터 배열을 더블포인터에 담는다. char** pp_arr = arr; //arr, pp_arr 둘다 주소이다. 차이는 arr은 상수주소ㅡ pp_arr변수주소. //싱수와 변수의 차이는 ++을 쓸수 있느냐의 차이를 제외하고는 완벽하게 동일하게 사용가능. char p_arr[] = "hello"; //출력 []사용 //arr[i] = *(ar..
[C언어]DAY14_배열포인터 배열 포인터 //목표: 문자열(문자의 배열)을 위한 2차원 배열(문자열이 여러개) //2차원 배열을 가리키기 위한 배열 포인터 #include #define ROW 3 //ROW : 줄 #define COL 100 //COL : 칸 //void print_array_2d() int main() { int i = 0; int j = 0; //문자열 여러개로 2차원 배열을 초기화 char arr[ROW][COL] = { "Weclome", "to", "Neverland"}; //위의 2차원 배열은 아래와 같은 효과 char text[COL] = "Welcome"; char* p_arr = text; //문제없음 text의 원소가 char이므로 둘다 char타입이 맞음. char(* p_arr2)[COL] =..
[C언어]DAY13_문자열 응용, 다차원 배열 문자열 응용 //문제 //문자열을 선언하고 "Hello World"로 초기화한 뒤, //문자열에 있는 영문을 모두 소문자로 변환시키는 프로그램을 작성하세요. // "Hello World" => "hello world" //대문자와 소문자는 32차이가 난다. #include #define MAX 100 void lower(char* arr, int count){ int i =0; printf("%d\n", sizeof(arr)); for(i=0; i ='A' && arr[i]
[C언어]DAY12_문자열 문자열 (= 문자의 배열) - 문자배열의 특징 1. 문자의 끝을 알려준다. 문자열의 끝에 null(=0)을 저장해줘야 함. 2. char 형 사용. (1byte) : 문자(아스키코드)는 0 ~ 127까지이므로 1byte로 충분. - 문자열 선언 : char 배열명[배열크기] - 문자열의 끝 : null charater (0) - 배열의 크기 : 문자열의 길이 + 1 (null을 넣어야하기 때문에) #include #define MAX 100 int main(){ int i = 0; //문자열 초기화1 char str[MAX] = {72, 101, 108, 108, 111, 0}; //Hello의 ascii code char *p_str = str; //배열의 이름은 주소, 주소는 포인터에 담는다. //문..