Step by step

한 걸음 한 걸음 천천히

728x90

Programming Language/C Language 18

포인터

C를 막 배우기 시작하는 학부생들이 가장 어려워하는 포인터 파트이다. 포인터는 고급 C 개발자가 되는 길이니, 포기하지 않고 이해하려 노력해주었으면 한다.포인터포인터란 주소를 갖고 있는 변수를 의미한다.변수는 어디에 저장되는가?변수는 메모리에 저장된다.또한, 이러한 변수를 컴파일러는 바이트 단위로 액세스한다.변수와 메모리변수의 크기에 따라서 차지하는 메모리 공간도 달라진다.char: 1Bshort: 2Bint: 4Bfloat: 4Blong: 4Bdouble: 8Blong long: 8Blong double: 16Bi = int, c = char, f = float이다. 보통 메모리에는 자료형의 크기 배수 자리부터 시작한다. int는 4의 배수 자리부터, double은 8의 배수 자리부터...주소 연산자주..

배열

배열의 필요성배열은 왜 필요한가?int a0;int a1;int a2;int a3;int a4;연속되는 데이터들을 만약 각각의 변수에 담게 된다면 데이터를 조작하기가 어려워진다.배열배열(Array): 동일한 타입의 데이터를 여러 개 저장 가능한 자료구조원소(요소, element): 배열 안에 들어있는 각각의 데이터배열의 크기: 원소의 개수원소는 연속된 메모리에 저장되며, 정수형의 번호(index)를 사용하여 접근(access)인덱스(첨자, index, subscript): 배열 원소의 번호인덱스는 0부터 시작배열을 이용하면 여러 개의 값을 하나의 이름으로 다룰 수 있음배열 선언int arr[10]int - 원소의 자료형arr - 배열의 이름10 - 배열의 크기배열 선언 예시int score[10]; ..

변수의 범위와 생존 시간

녹색은 변수의 범위, 청색은 변수의 생존 시간scope: 변수, 함수, goto label 등의 명칭이 사용될 수 있는 프로그램 텍스트의 영역; 공간적 개념global (전역): 전체 프로그램; nonstatic external variable, nonstatic(global) functionfile (파일): 해당 소스 파일; external static variable, static functionfunction (함수): 해당 함수; goto labelblock (블록): 해당 블록; function parameter, local variable(auto/register variable, local static variable) (parameter: register 선언 가능, auto 선언은 허용..

변수와 함수(심화)

이제 진짜 통곡의 벽이라 불리는 재귀함수에 관해 얕게 들여다보는 시간이다. 다들 정신 바짝 차리길 권장한다.변수의 속성변수의 구성 요소: 이름(identifier), 값(value), 주소(address), 속성(attribute)속성(attribute): 타입(type), 크기(size), 범위(scope), 생존 시간(lifetime), 연결(linkage)범위(scope): 변수가 사용 가능한 범위, 가시성생존 시간(lifetime): 메모리에 존재하는 시간연결(linkage): 다른 영역(block, file)에 있는 변수와의 연결 관계변수의 범위전역 변수와 지역 변수로 나뉨전역 변수와 지역 변수전역 변수: 함수 외부에서 정의. ―static으로 정의되지 않아야 함―지역 변수: 함수 내부에서 정의..

함수

C언어를 공부하는 컴퓨터공학과 학생들의 첫 번째 벽이라고 불리는 함수 파트이다. ―정확히는 재귀 함수 파트를 어려워한다.―함수함수의 개념함수(Function): 입력을 받아서 특정한 작업을 수행하여 결과를 반환하는 블랙 박스와 같다.여기서 말하는 입력은 사용자가 주는 입력 외에도 다양한 입력을 뜻한다.함수의 필요함수는 어째서 필요한가?만약 우리가 1 ~ 10까지 출력하는 코드를 여러번 사용할 일이 있다고 하자.함수를 배우지 않은 상태의 우리라면 이런 코드가 나올 것이다.for (int i = 1; i 이런 코드의 경우 가독성이 매우 떨어진다.만약 함수를 배운 상태라면 이러한 코드를 작성해 낼 수 있다.void print_num() { for (int i = 1; i 이 경우엔 위 코드처럼 하나하나 ..

반복문

반복문은 크게 for문 while문으로 나뉜다. 반복문의 필요성프로그래밍을 입문하는 단계에선 흔히들 의문을 갖는다. "왜 반복문으로 사용하지?" 이에 대한 답변으로 반복문을 사용하지 않을 시 코드가 매우 지저분해지고 프로그래밍 자체도 매우 귀찮아진다. Hello World를 10번 출력하는 코드를 작성한다고 예시를 들어보자.printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");printf("Hello World\n");..

C언어 접두사, 접미사

C언어를 배우다보면 다양한 접두, 접미사가 등장한다.이 포스트에서는 그런 접두사, 접미사에 대해 다룬다.접두사C언어에서는 숫자 앞에 0x, 0, 0b 등이 앞에 붙는다.0b10진수 정수 → 2진수 정수로 바꾸어준다.010진수 정수 → 8진수 정수로 바꾸어준다.0x10진수 정수 → 16진수 소문자 정수로 바꾸어준다.0X10진수 정수 → 16진수 대문자 정수로 바꾸어준다.이러한 접두사는 10진수 상수 앞에 붙을 수 있다. 다만, 0b의 경우에는 C언어에 표준 규격이 없기에, 컴파일러마다 되는 경우가 있기도, 없기도 하다.접미사리터럴 접미사라고 불리는 이것은 수의 진법을 바꾸는 접두사와 다르게 데이터의 형변환을 담당한다.상수 리터럴 접미사생략intl, Llongu, Uunsigned intul, ULunsig..

조건문

제어문프로그램의 실행 순서를 변경(제어)하는 문장조건문조건에 따라 다른 명령을 수행하며, 선택구조 표현이다.if 문과 switch 문이 있다.if 문// if 문의 구조if (조건)    (수행할 명령)여러 줄의 명령을 수행하고자 한다면 명령들을 괄호로 그룹핑하면 된다.1.if (조건)    (수행할 문장)printf("Hello World");2.if (조건)    (수행할 문장)    printf("Hello World");1과 2는 수행하는 방식이 다르게 보인다.1은 if 조건문이 참이든 거짓이든 printf("Hello World"); 를 실행하는 것으로 보이며2는 if 조건문이 참이어야지 printf("Hello World"); 를 실행하는 것으로 보인다. 그러나, 들여쓰기의 유무는 상관없이 1..

연산자

연산자를 다루기 전에 아주 짧막하게 수식에 대해 알아야 한다.수식: 변수, 상수, 연산자로 이루어져 있다. 반드시 결과값을 갖는다. 연산자와 피연산자(변수, 상수)로 나누어진다.산술 연산자산술 연산: 컴퓨터의 가장 기본적인 연산덧셈, 뺄셈, 곱셉, 나눗셈 등 사칙연산을 수행한다. +나머지덧셈+덧셈을 수행함 7 + 4뺄셈-뺄셈을 수행함 7 - 4곱셈*곱셈을 수행함 7 * 4나눗셈/나눗셈을 수행함 7 / 4나머지%나머지를 수행함, 7 % 4, 7을 4로 나눈 나머지를 구함.거듭제곱 연산자는 없다.printf("%d\n", 7 + 4); // 11printf("%d\n", 7 - 4); // 3printf("%d\n", 7 * 4); // 28printf("%d\n", 7 / 4); // 1printf("%d..

자료형과 오버플로우

자료형은 데이터의 종류를 말한다. 자료형은 크게 세 가지 분류로 나누어 볼 수 있다.정수형부동소수점(실수)형문자형정수형에는 short > int >= long >= long long 이 있다.short은 2Byte, int는 4Byte, long은 4~8Byte, long long은 8Byte이다.sizeofC언어에서 자료형이 차지하고 있는 메모리 공간을 확인하기 위해서 sizeof 연산자를 사용할 수 있다.int n;sizeof n; // 4// 변수의 경우 괄호가 필요 없음sizeof(char); // 1sizeof(long) // 환경마다 다르지만 보통 4sizeof(long long) // 8sizeof(short) // 2sizeof(int) // 4sizeof(float) // 4sizeof(..

728x90