C 언어는 사용할 모든 변수와 함수들을 먼저 선언 또는 정의해야 한다.

int a;

scanf("%d", &a);

int b; //ERROR

scanf("%d", &b);

for(int i=0; i<a; i++) //ERROR
{
    int c += i+b; //ERROR
}

printf("%d", c);
void func(int n); //함수 선언이 되어 있어야 한다.

int main()
{
    func(5);
    return 0;
}

void func(int n)
{
	  int i;
	  for(i=0; i<n; i++)
        printf("hello world");
}

Const

상수는 변하지 않는 수, const 라는 키워드를 통해 변수를 상수화 하면 프로그램 실행 시 변하지 않는 수로 사용가능

const double PI = 3.14;

PI = 3.14159; //ERROR PI는 const 키워드로 상수화되어 PI 변수값을 변경할 수 없다.

포인터에 const를 적용하면 어떻게 될까?

int a = 10;
int b = 20;
const int* p = &a; //int const *p = &a;

// 아래 코드 중 어떤 코드가 에러가 날까?
*p = 20;
p = &b;

printf("%d", *p);
int a = 10;
int b = 20;
int* const p = &a;

// 아래 코드 중 어떤 코드가 에러가 날까?
*p = 20;
p = &b;

printf("%d", *p);
int a = 10;
int b = 20;
const int* const p = &a;

// 아래 코드 중 어떤 코드가 에러가 날까?
*p = 20;
p = &b;

printf("%d", *p);
const char str[10] = {'h','e','l','l','o','\\0'}; //const char str[10] = "hello";

printf("%p\\n", str); //str의 주소값

// 아래 코드 중 어떤 코드가 에러가 날까?
str[0] = 'b';
strcpy(str, "world");

printf("%p\\n", str); //str의 주소값이 바뀔까?

printf("%s", str);

Type Casting (형 변환)

Implicit - 암묵적 - 묵시적 - 자동

// 대입연산
double d = 10;
int a = 12.345;

printf("%lf", d);
printf("%d", a);

// 수식 연산
int a = 10 + 12.34;
double d = 10 + 12.34;

printf("%lf", d);
printf("%d", a);

Explicit - 명시적 - 수동

int i;
double d;

d = 5/2;
d = (double)5 / 2;
d = 5 / (double)2;
d = (double)5/(double)2;
i = 1.2 + 3.4;
i = (int)1.2+ (int)3.4

포인터 형 변환

변환된 포인터 타입에 따라 포인터 연산이나 값 참조 시 그 결과가 달라진다.