cast 연산자
이미 지정된 자료형을 다른 자료형으로 일시적으로 강제로 바꿀 수 있는데 이것을 명시적 형 변환(explicit type conversion)이라고 하며 이때 cast 연산자 사용
변환시키고자 하는 값이나 변수 앞에 해당 자료형을 괄호로 묶어 사용
(자료형)값_or_변수
- (int)x, (char)ch, (double)sum
숫자 3은 int형, (double)3은 일시적으로 double형 3.0
'A'는 문자, (int)'A'는 숫자(ASCII코드 값) 65
int형 65는 숫자, (char)65는 ASCII코드 값 65에 해당하는 문자 'A'
cast 연산자 예
#include <stdio.h>
int main(void)
{
int x=10,y=4;
double z,z1;
printf("1:%d\n",10/4); //2
printf("2:%f\n",10/4); //0.000000, 컴파일러에 따라 2.500000, 경고
printf("3:%f %f %f\n",10/4.0, 10.0/4, 10.0/4.0);//모두 2.500000
printf("4:%d\n",x/y); // 2
printf("5:%f\n",x/y); // 0.000000, 컴파일러에 따라 2.500000, 경고
z=x/y; //double형인 z에 2를 저장하면 소수점만 더 붙음
printf("6:%f\n",z); // 2.000000
z=(double)x/y; //10.0/4
printf("7:%f\n",z); // 2.500000
z=x/(double)y; //10/4.0
printf("8:%f\n",z); // 2.500000
z=(double)x/(double)y; //10.0/4.0
z1=(double)(x/y); //(double)(10/4)
printf("9:%f %lf %lf\n",z,z,z1);// 2.500000 2.500000 2.000000
return 0;
}
콤마 연산자
여러 개의 수식을 하나의 수식처럼 표현할 때 사용
왼쪽부터 순서대로 평가
콤마 연산자는 여러 줄을 한 줄로 줄일 때 사용
세 가지 방법 모두 같은 결과
- x = 10;
y = 5; - x = 10; y = 5;
- x = 10, y = 10;
sizeof 연산자
sizeof 연산자는 변수나 자료형, 배열 등이 차지하는 메모리 영역의 크기를 바이트(byte) 단위로 얻음
- sizeof 변수_or_배열명
- sizeof num
- sizeof(자료형)
- sizeof(int)
- 배열은 sizeof(배열명)을 쓰고, 자료형×방의 크기가 계산되어 나옴
sizeof 연산자 예
#include <stdio.h>
int main(void)
{
int x;
int y[10];
printf("%zd ",sizeof("I love you!"));//12
printf("%zd ",sizeof("대한")); // 5(cp949) or 7(utf-8)
printf("%zd ",sizeof(int)); // 4
printf("%zd ",sizeof(x)); // 4, sizeof x라고 써도 됨
printf("%zd\n",sizeof(y)); // 40, sizeof y라고 써도 됨
return 0;
}
유니코드(Unicode)
Unicode는 전 세계의 모든 문자를 표현할 수 있는 단 하나의 문자셋
코드 포인트 표기는 U+0041 과 같이 함
U+ 는 Unicode를 의미하고, 0041은 코드 포인트 값으로서 16진수
Unicode 인코딩
UTF-32, UTF-16, UTF-8 등을 제공
영문자 A는 U+0041을 1(0x41)이나 2(0x0041)나 4(0x00000041)바이트에 저장
한글 한 글자는 2(utf-16), 3(utf-8), 4(uft-32)바이트로 저장
윈도우에서 한글 인코딩은 2바이트로 한글을 표현하는 EUC-KR와 확장 버전인 CP949 사용

&연산자
#include <stdio.h>
int main(void)
{
int a=10, b=20;
printf("변수 a의 값=%d, 주소=%p\n",a, &a);
printf("변수 b의 값=%d, 주소=%p\n",b, &b);
return 0;
}
&a는 a변수의 메모리 주소의 첫 번지. int형은 4바이트이므로 변수의 저장 공간은 4개의 주소를 가짐
&는 그 중에서 시작 주소를 얻을 수 있음
기타 연산자
[] 첨자 연산자
- 10장, 배열
- Subscript
- a[b]
- int x[10]; //구두점
- x[0]=1; //연산자
구조체 멤버 접근 연산자
- 12장, 구조체
- Structure reference
- a.b
- Structure dereference
- a->b
* 간접참조연산자
- 11장, 포인터
- Indirection
- int x=10,y;
- int *px=&x; //구두점
- y=*px; //연산자
제어문
제어문
위부터 아래로 순차적으로 실행되는 프로그램의 실행 순서를 바꾸기 위해서 사용
for문과 if문의 사용 빈도가 가장 높음
| 조건문 | 반복문 | 분기문 |
| if | for | goto |
| if ~ else | while | continue |
| switch ~ case | do ~ while | break |
조건문 : if
if : 조건식이 "참"인가?
조건식이 참이면 문장1 실행, 거짓이면 문장1은 실행하지 않고 건너뜀
if (조건식) {
문장1;
}
다음문장;
if(score==0) printf("0점 입니다.\n"); //score가 0과 같으면 "0점 입니다."를 출력
if(score) printf("0점이 아닙니다.\n"); //score가 0이 아닌 모든 값을 가지면 "0점이 아닙니다."를 출력
if(!score) printf("0점 입니다.\n"); //score가 0이면 "0점 입니다."를 다시 출력
조건문 : if ~ else
양자택일
조건식이 참이면 문장1 실행 후 다음문장 실행, 거짓이면 문장2 실행 후 다음문장 실행
if (조건식){
문장1;
}
else {
문장2;
}
다음문장;
조건문 : 다중 if~else
더 많은 조건에 따라 분기해야 하는 프로그램은 다중 if~else문을 사용
조건식1이 참이면 문장1 실행 후 다음문장 실행,
조건식2가 참이면 문장2 실행 후 다음문장 실행,
둘다 아니면 문장3 실행후 다음문장 실행
if (조건식1) {
문장1;
}
else if (조건식2) {
문장2;
}
else {
문장3;
}
다음문장;