본문 바로가기

C언어

(36)
[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언어 예습]DAY18_구조체1 구조체(타입) 변수 : 반복되는 값들을 편하게 관리하기 위해 함수 : 반복되는 문장들을 편하게 관리하기 위해서 구조체 : 반복되는 변수들을 편하게 관리하기 위해서 (함수는 C++, JAVA에서 관리 가능 : 클래스) - 구조체를 사용하기 위해서는 공통요소를 찾아야함! 구조체 선언 struct 구조체이름{ 자료형 멤버변수명; ... }; 구조체 사용 (1) struct 구조체이름 변수명; 변수명.멤버변수명 = 값; ( . : 하위연산자 ) ( A.b : A안에 b ) (2) struct 구조체이름 변수명 = { .멤버변수명 = 값,...} (3) struct 구조체이름 변수명 = {값, ...} #include #include //Animal 구조체 만들기 struct Animal { //구조체 내에서는 ..
[C언어 예습]DAY17_동적 배열 실생활 예제(막대그래프), 알고리즘 예제(Baseball Game) 그래프의 원리 ★로 알아보기. #include #include void main() { //학생 수 만큼 점수를 입력받아 출력하기 //1. 학생 수 입력받기 //2. 학생 수 만큼 점수 입력받기 int cnt = 0; int* arScore = 0; printf("학생 수를 입력하세요.\n"); scanf_s("%d", &cnt); arScore = (int*)malloc(sizeof(int)*cnt); for (int i = 0; i < cnt; i++) { printf("%d번 학생 점수 입력 :", i + 1); scanf_s("%d", arScore + i); } for (int i = 0; i < cnt; i++) { printf("%d번 학생 점수 : %d점\n", i + 1, arScore[..
[C언어 예습]DAY16_동적 할당, 동적 배열 동적할당(dynamic allocation) malloc() 자료형* 포인터명 = (자료형*)malloc(sizeof(자료형)*크기); 자료형* 포인터명 = (자료형*)malloc(크기); 동적할당 초기화(clear allocation) calloc() 자료형* 포인터명 = (자료형*)calloc(크기, sizeof(자료형)); 동적할당 크기변경(resize allocation) realloc() 자료형* 포인터명1 = (자료형*)malloc(sizeof(자료형)*크기); 자료형* 포인터명2 = (자료형*)realloc(포인터명1, sizeof(자료형)*변경할크기); 동적할당 메모리 해제(중요) free(포인터명); * 메모리를 해제하지 않으면 사라지지 않고 남아있기 때문에 overflow가 생기면 심각..