묻공러
'C/[코드조선] C 핵심' 카테고리의 글 목록 (3 Page)

C/[코드조선] C 핵심

C/[코드조선] C 핵심

[C] strcmp()

strcmp() vs. strncmp() vs. int strncmp() - strcmp() strcmp 함수는 두 문자열을 비교하여 동일한지 여부를 확인한다 비교할 두 문자열이 완전히 동일하면 0을 반환하고, 첫 번째로 다른 문자의 ASCII 값에 따라 음수 또는 양수를 반환한다 - strncmp() strncmp 함수는 두 문자열 중에서 처음부터 n개의 문자까지 만을 비교한다 두 문자열이 동일한 경우 0을 반환하고, 동일하지 않은 경우 두 문자열의 첫 번째 다른 문자의 ASCII 값에 따라 음수 또는 양수를 반환합니다. strncmp은 주로 특정 길이만큼의 문자열을 비교할 때 사용된다 - int strncmp() int strncmp은 반환 값이 int로 명시되어 있는 strncmp 함수이다 strn..

C/[코드조선] C 핵심

[C] strlen()

strlen() vs. strnlen() vs. strnlen_s() - strlen() strlen 함수는 null 종단 문자('\0')가 나타나기 전까지의 문자열 길이를 측정한다 하지만 null 종단 문자 이후의 메모리를 읽기 시작할 경우, undefined behaviour를 초래할 수 있다 - strnlen() strnlen 함수는 첫 번째 매개변수로 전달된 문자열에서 최대한으로 지정된 길이까지만 검사한다 null 종단 문자 이전에 지정된 최대 길이에 도달하면 검사를 중단하고 그때까지의 길이를 반환한다 strnlen은 C99 표준에서 도입되었고 많은 C 라이브러리에서 사용 가능하다 - strnlen_s() strnlen_s는 C11 표준에서 도입된 안전한 함수로 strnlen의 개선버전이다 추가적..

C/[코드조선] C 핵심

[C] 포인터

참조 vs. 역참조 참조: 포인터를 의미하며, 변수의 값을 직접 다 들고 있는 게 아니라, 메모리 주소를 읽는 것 역참조: 변수의 값을 직접 읽는 것이 아니라, 메모리 주소를 통해 타고 가서 값을 읽는 것 // 직접 접근 int score = 100; score = 50; // 간접 접근 int score = 100; int* ptr_to_score = &score; // 포인터를 통해 참조 *ptr_to_score = 50; // 역 참조 연산자(*)를 통해 역참조 NULL 포인터 NULL 포인터는 아래와 같은 경우에 사용한다 1. 포인터의 초기화 2. 포인터가 더이상 사용 중이지 않음을 알리고 싶을 때 ptr = NULL; 3. 포인터가 유효한 메모리 주소를 참조하고 있는지 확인할 때 if (NULL..

C/[코드조선] C 핵심

[C] 재귀 함수 (Resurcive Function)

재귀 함수(Resurcive Function) 함수 내에서 자기 자신을 호출하는 함수를 의미한다 #include void recur(int count); int main(void) { recur(3); return 0; } void recur(int count) { printf("%d\n", count); if (1 == count) { return; } recur(count - 1); } 재귀 함수의 핵심 재귀 함수 속 return의 위치와 재귀 함수 속 함수가 호출되는 위치가 매우 중요하다 다시 말해, 재귀 함수 속 return의 위아래로 어떤 코드를 작성하느냐, 함수 호출 위 아래로 어떤 코드를 작성하느냐에 따라 결과물이 달라진다 #include void recur(int count); int ma..

C/[코드조선] C 핵심

[C] 변수의 종류

변수의 종류 1. 지역 변수 2. 전역 변수 3. const 변수 4. static 변수 5. extern 변수 지역 변수(Local Variable) 스택 메모리에 저장되는 블럭 스코프 내에 선언된 변수이다 함수가 종료되면 스택 프레임이 반환되면서 더 이상 접근 불가능하다 전역 변수(Global Variable) 데이터 섹션에 저장되는 파일 스코프에 선언된 변수이다 const 변수 const 키워드를 붙이면 해당 변수를 상수화 시켜주는 것이다 초기화가 강제되고 초기화 이후에 값을 변경할 수 없다 매크로 상수는 변수가 아니라서 메모리를 차지하지 않는 반면, const 변수는 메모리를 차지한다 static 변수 static 변수는 크게 2가지 특징을 가지고 있다 1. 선언이 된 해당 범위에서만 유효하고 해..

C/[코드조선] C 핵심

[C] 스코프와 스택프레임

스코프의 종류 1. 블럭 스코프(Block Scope) 2. 파일 스코프(File Scope) 3. 함수 스코프(Function Scope): goto-label문과 관련 있음. 4. 함수 선언 스코프(Function Declaration Scope): 매개변수 목록과 관련 있음. 블럭 스코프(Block Scope) vs. 파일 스코프(File Scope) 조건문, 반복문, 함수 같은 문(statement)에 사용되는 중괄호 범위를 블럭 스코프라고 하고 지역변수가 저장된다 어떤 블럭 스코프에도 속하지 않는 파일 내 범위를 파일 스코프라고 하고 전역변수가 저장된다 여기서 파일이란 Translation Unit 범위로 볼 수 있으며 Translation Unit 범위는 전처리 과정에서 일어나는 #includ..

C/[코드조선] C 핵심

[C] 2차원 배열

2차원 배열 1차원 배열에서 한 차원을 추가한 것이지만, 실제로 메모리에서는 1차원 배열을 이어 붙인 형태이다 1차원 배열의 선언 방법에서 왼쪽으로 추가해서 사용하면 된다 왼쪽부터 큰 차원이라고 생각하면 된다 예를 들어, 음료수 몇 병이 들어있는지 나타내는 1차원 배열은 arr1 [병의 개수] =... 몇 박스에 몇 병이 들어있는지 나타내는 2차원 배열은 arr2 [박스의 개수][병의 개수] =... 이처럼 왼쪽이 더 큰 차원을 의미한다 int arr[ARR_HEIGHT][ARR_WIDTH] = { { 1, 2, 3, 4, }, { 5, 6, 7, 8, }, { 9, 10, 11, 12, }, {13, 14, 15, 16, }, {17, 18, 19, 20, } };

C/[코드조선] C 핵심

[C] 반복문

i++ vs. ++i 후치를 우선적으로 사용하고 이 줄에서 증가하면 안 되는 특별한 경우에만 전치를 사용하는 것이 좋다 break vs. continue break는 가장 가까운 반복문 '하나'를 빠져나간다 continue는 아래 부분을 생략하고 다시 반복문 처음(조건) 부분으로 간다 이중 반복문 이중 반복문의 결과는 아래의 과정을 거치면 쉽게 파악할 수 있다 1. 줄의 개수를 파악하고 인덱싱(번호매김) 2. 각 줄의 칸 개수를 파악하고 인덱싱 3. 각 칸의 출력을 파악 #include int main(void) { int i, j; for (i = 1; i

C/[코드조선] C 핵심

[C] 조건문과 Intentional-Fallthrough

조건문을 사용할 때 좋은 습관 1가독성을 높이고자 중괄호(스코프)를 생략하는 사람이 정말 많다중괄호(스코프)를 사용해서 명시적으로 표현해 주어서 헷갈리는 상황이 혹여나 발생하지 않도록 확실하게 표시하자if (a   조건문을 사용할 때 좋은 습관 2값의 범위를 조건식에 적을 때는 가독성에 신경을 쓰는 것이 좋다if(a >= 0 && a   Intentional-Fallthrough switch-case 문에서,고의적으로 case 내부에 break 구문을 적지 않은 경우를 의미한다c++ 17부터는 [[fallthrough]]; 를 사용하면 된다 switch (value){case 1: 명령어1; /*Intentional-Fallthrough*/ // 위처럼 주석을 달아주어서 가독성을 높이는 것이..

C/[코드조선] C 핵심

[C] 연산자

정수 피연산자와 실수 피연산자의 연산같은 자료형의 피연산자들 간의 연산이 일반적이지만,다른 자료형의 피연산자들간의 연산을 해야 하는 경우가 있을 수 있다 이들의 결과는 피연산자들의 자료형 중 한쪽 자료형만을 따르게 되기 때문에주의해서 사용해야 한다이런 경우가 발생하지 않기 위해서는 형변환을 해주는 것이 좋다  복합 대입 연산자 산술 연산과 대입 연산이 함께 계산되는 연산자를 의미한다// *= (복합 대입 연산자)은 곱셈과 대입이 한 번에 이뤄진다mul *= 3; // mul = mul * 3;  증감 연산자 (전치 / 후치)전치는 지금 바로 연산이 이루어지고 후치는 해당 줄에서 가장 마지막으로 처리되기에 다음 줄에 연산이 된다고 생각하면 된다int a = 1;int b = 1;int prefix = 1 ..