변수

: Variable, 變 변할  數 셈 수 : 변할 수 있는 값

: 변수명은 데이터(data)를 저장하는 메모리 공간을 상징한다

 

상수

: Constant, 常 항상 상 數 셈  : 고정된 값

 

리터널

: Literal, 데이터(값) 그 자체

//         ↓ const 키워드를 이용한 심볼릭 상수
const int MAX = 10;
//               ↑ 리터럴

//  ↓  #define을 이용한 매크로 심볼릭 상수
#define MAX 10;

변수와 메모리 주소의 이해

- 변수의 주소값이란 해당 데이터가 저장된 메모리의 "시작 주소"를 의미한다.

- 그리고, 모든 값(변수, 상수, 리터럴, 함수 등)은 저장되며, 이는 메모리 주소 가지고 있음을 의미한다.

- C언어에서는 이러한 주소를 1바이트 크기의 메모리 공간으로 나누어 '포인터 변수'로 표현한다.

예) int형 데이터는 4Byte, int형 포인터 (주소값) 1Byte

변수의 유효 범위(variable scope)

- 변수의 유효범위는 물리적 한계다

- 지역 변수(local variable). 전역 변수(global variable), 정적 변수(static variable), 레지스터 변수(register variable)

- 코드(code), 영역 데이터(data), 영역 스택(stack) 영역, 힙(heap) 영역

Data Type & Format Specifier

 

- 운영체제마다 데이터 타입의 크기가 다를 수 있다.(Windows OS는 int와 long을 64비트에서도 4바이트)

운영체제 char short int long 포인터
Windows 1바이트 2바이트 4바이트 4바이트 8바이트
UNIX 1바이트 2바이트 4바이트 8바이트 8바이트

Suffix(접미사)

접미사를 생략하면 정수 리터럴은 int 크기, 실수 리터럴 double 크기가 되므로, 명시적으로 표기한다.

 

#include <stdio.h>

int main()
{
    printf("%ld\n", -10L);                       // long 크기의 정수 리터럴
    printf("%lld\n", -1234567890123456789LL);    // long long 크기의 정수 리터럴

    printf("%u\n", 10U);                         // unsigned int 크기의 정수 리터럴
    printf("%lu\n", 1234567890UL);               // unsigned long 크기의 정수 리터럴

    printf("%lu\n", 10UL);                       // unsigned long 크기의 정수 리터럴
    printf("%llu\n", 1234567890123456789ULL);    // unsigned long long 크기의 정수 리터럴

    return 0;
}

bool(불 자료형)

#include <stdio.h>
#include <stdbool.h>    // bool, true, false가 정의된 헤더 파일
 
int main()
{
    bool b1 = true;
 
    if (b1 == true)        // b1이 true인지 검사
        printf("참\n");    // b1이 true이므로 참이 출력됨
    else
        printf("거짓\n");
 
    return 0;
}

연산자의 종류와 우선순위

L-Value

형 변환 (type conversion, type casting)

암시적, 묵시적 (implicit), 형 확장(type promotion), 형 축소(type demotion)

06 함수

- 함수(function)란 하나의 목적 수행하기 위해 설계된 코드다.

- 하나의 기능, 하나의 함수, 단일 패스(one pass) 컴파일 방식

 

- 인수 전달 방법

a. 값에 의한 전달(call by value)

eg. printf() 함수

변수를 인수로 쓰고 변수의 데이터 값을 보내는 것, 받은 데이터 값을 복사해서 독립적으로 사용

 

b. 참조에 의한 전달(call by reference)

eg. scanf() 함수

주소를 인수로 쓰고 변수의 주소값을 보내는 것, 받은 메모리 주소를 직접 참조해서 사용

int test = 1; printf("%d\n", test); // 1 데이터(값)을 복사해 사용 printf("%p\n", &test); // 0x7ffe630361ac 메모리 주소값을 %p 출력 scanf("%d\n", &test); // 메모리 주소를 직접 참조해 입력