C 언어는 사용할 모든 변수와 함수들을 먼저 선언 또는 정의해야 한다.
- C99 표준 이 후로는 변수 선언 위치가 자유로워졌지만 모든 컴파일러가 그것을 보장하진 않는다.
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
포인터 형 변환
변환된 포인터 타입에 따라 포인터 연산이나 값 참조 시 그 결과가 달라진다.