13. 구조체(struct), 열거형(enum), 동적 메모리 할당(malloc), 연결 리스트
·
Coding/C
구조체 (structure)배열 : 같은 자료형의 집합구조체 : 다양한 자료형의 집합>> 관련 있는 데이터를 하나의 단위(객체)로 표현 열거형 (enumerate)변수가 가질 수 있는 값의 종류가 한정된 경우(상태 코드, 요일 등), 의미 있는 이름(상수)를 부여하여 사용하는 자료형- 내부적으로는 정수(int)로 처리- 기본적으로 0부터 시작하여 1씩 증가(자동할당), 필요시 값 지정 가능 동적 메모리 할당 (Dynamic Memory Allocation)프로그램 실행 중에 필요한 만큼 메모리의 Heap 영역을 할당>> 크기를 미리 알 수 없거나, 실행 중에 크기가 변하는 자료형(배열)에서 사용- 동적 할당된 메모리는 프로그램이 끝날 때까지 유지되므로, 사용 후 해제하여 메모리 누수 방지 필요 연결 리스..
12. 문자열
·
Coding/C
문자열 상수 (literal) : "abc"- " " 로 묶인 문자들의 나열- 끝에 NULL 문자('\0') 포함 - 저장 위치 : Data 영역 (수정 불가능) 문자열 변수 (variable) : char str[] = "abc";- C언어 에서는 별도의 문자열 타입 존재 X (Python: str 존재) >> 문자 배열 (char str[])을 사용해 문자열 상수의 값을 복사하여 사용- 문자열 상수는 항상 끝에 NULL 문자를 포함하므로, 배열의 크기를 (문자열 길이 + 1) 로 선언하여야 문자열 함수 사용시 오류 X - 저장 위치 : Stack 영역 (수정 가능) 문자열 포인터 : char *p = "abc";- 문자열 상수를 가리키는 포인터- 포인터 변수(p)는 주소(문자열 상수 "abc"의 첫 ..
11. 포인터와 배열
·
Coding/C
포인터와 배열의 관계int arr[10];int *p;// 아래의 두 코드는 동일p = &arr[0];p = arr; // 배열 이름 자체가 배열의 첫 번째 요소의 메모리 주소를 나타내는 상수 포인터 연산- p++ / p-- : p가 배열을 가리키는 포인터 변수인 경우, 인덱스 이동과 동일 (자료형의 크기만큼 주소 증감) 포인터와 다차원 배열#include #define ROW 2#define COL 2int main() { int arr[ROW][COL] = { {1, 2}, {3, 4} }; int *p; // 포인터 변수 선언 for (p = &arr[0][0]; p + 함수의 매개변수를 배열로 선언하고자 할 때, int a[..
10. 포인터
·
Coding/C
메모리 / 주소- 메모리는 byte 단위로 나누어져 있음- 각 byte는 고유한 주소를 가짐 변수는 여러 바이트에 저장 > 변수가 저장된 메모리의 시작 주소 = 변수의 주소 포인터 변수 : 변수(객체)의 주소를 저장하는 변수포인터 연산자- 주소 연산자 (&) : &변수명 = 해당 변수의 메모리 주소 반환- 간접 연산자 (*) : 선언 - 해당 변수가 포인터임을 나타냄 // 사용 - 해당 포인터가 가리키는 주소의 실제 값 (값의 복사본 X) 값에 의한 전달 (Call by value)#include void swap(int p, int q) { printf("Before swap: p = %d, q = %d\n", p, q); int temp = p; p = q; q = tem..
09. 변수의 범위와 지속기간
·
Coding/C
변수의 범위 (Scope)지역 변수 (Local Variable) : 함수(매개변수-parameter)/블록 내부 (Block Scope)전역 변수 (Global Variable) : 함수 외부 > 모든 함수가 공유/수정 가능 (File Scope) 변수의 지속기간 (Storage Duration)자동 지속 기간 (Automatic Storage Duration) : 지역 변수의 특성함수/블록 시작 > 메모리 할당 > 함수/블록 종료 > 메모리에서 해제정적 지속 기간 (Static Storage Duration) : 전역 변수의 특성프로그램 시작 > 메모리 할당 > 프로그램 종료 > 메모리에서 해제+ static 지역 변수 : Block Scope + Static Storage Duration >> 다음..
local/pushed commit 수정/삭제 방법 (reset/rebase/revert/checkout)
·
Coding/Github & Git
local 상태git log # commit 기록 확인 -> q로 나가기git reset HEAD^ # 직전 commit 기록 삭제git reset HEAD~[번호] # n번째 이전 commit 기록 삭제, 'HEAD~[번호]' 대신 주소(앞 7자리) 입력시 해당 커밋git commit --amend # 직전 commit 메시지 수정 -> 텍스트 편집기에서 수정 후 저장git rebase -i HEAD~[번호] # n번째 이전 commit 기록 출력, 'HEAD~[번호]' 대신 주소(앞 7자리) 입력시 해당 커밋# 수정하고자 하는 commit의 'pick'을 'reword'로 변경 후 저장 -> :wq!로 나가기# commit 메시지 수정 후 저장 -> :wq!로 나가기 pushed 상태# local과 ..