자료형
문자형 : char(1byte)
정수형 : short(2byte), int(4byte), long(4byte)
부동소수점형 : float(4byte), double(8byte)
printf
%d | 10진 정수 | %ld | long |
%f | 실수 | %u | unsigned int |
%c | 문자 | %o | unsigned 8진수 |
%s | 문자열 | %x | unsigned 16진수 |
%e | 부동소수점 실수 |
scanf
%d | 10진 정수 | %e | float |
%f | float | %ld | long |
%lf | double | %u | unsigned int |
%c | 문자 | %o | unsigned 8진수 |
%s | 문자열 | %x | unsigned 16진수 |
이스케이프 시퀀스
\a : 경고(삐소리) \b : 백스페이스 \n : 줄바꿈 \t : 수평탭
기호 상수
#define Change_rate 100 #기호 상수의 경우 첫 글자는 대문자로 할 것
;
cpu가 동작해야하는 명령어 끝
#은 cpu, 컴파일러가 안하고 전처리가 처리
함수는 {}로 정의함으로 끝을 따로 표시할 필요 x
센티널
입력되는 데이터의 끝을 알리는 특수한 값
조건문
if(조건식) { } else if(조건식) { } else { } |
switch(변수) { case 정수 : #'+', 실수 , 문자가능, 변수불가 문장; break; default: 문장; break; } |
label : goto label; #가운데에 {}안써도 됨 |
반복문
초기식 while(조건식) { 증감식 } |
do { }while(조건식); |
for(초기식;조건식;증감식) { } |
break : 반복문 끝냄
continue : 코드 실행 건너뛰기
메모리
cs | code segment |
ds | data segment |
heap | |
stack | main이 저장됨 |
함수
int/void print_star(int x, int y)
{ #반환이 int라면 return이 들어가야 함(반환값은 하나만 가능)
}
int main(void)
{ int x = 0 , y = 0 ;
print_star(x,y);
return 0;
}
함수원형
함수원형은 main 함수 위에 적고 함수 정의는 main 밑에 정의
변수
전역변수 : 함수 외부에서 정의됨, 모든 곳에서 사용가능, ds(data segment)저장
지역변수 : 함수 내부에서 정의됨, 선언된 블록에서만 사용가능, stack저장
auto : 안쓰면 보통 auto로 인식, 블록을 벗어나게 되면 자동적으로 소멸
register : 빠르게 계산할 때 필요, 레지스터는 유한개이므로 선언시 일부반 적용될 수도
static : 선언시 ds에 저장됨(한번 생성되면 안사라짐), 다른 함수는 사용이 불가능(information hiding, 캡슐화된 코드를 제공 할 때 함부로 건드려서는 안되는 코드들을 보호하기 위해, 프로그램의 안정적 구현을 위해)
배열
int scores[10];
배열의 이름은 포인터와 같음(일차원 배열만 포인터 대신 가능)
개수 = sizeof(scores) / sizeof(scores[0])
형식이 동일한 걸 연달아 저장할 때 이용(형식이 다르면 구조체)
함수 이용시 사본이 아닌 원본에 전달(용량이 너무 커짐)
int 함수명(int scores[]) # [ ]안에 개수 적을 필요x
이차원배열 → 메모리가 1차원이기 때문에 가로로 생각, 박스가 나열됨
포인터
사용을 하는 이유 : 이름으로 접근하지 못하는걸 이용하기 위해
초기화시 NULL 이용 (접근하면 절대 안되기 때문에 컴파일러에서 오류로 인식하기 때문)
scanf에서 &를 입력하는 이유는 '포인터를 사용하는 이유'와 같음
int * → 4, char * → 1, double * → 8 # 시작하는 주소는 같더라도 읽는 길이가 다름
포인터의 크기는 4 Byte(주소가 4 Byte로 표시되기 때문)
포인터 타입에 따라 ++연산 증가의 값이 달라짐 → 배열과 연관
char *pc = 100; ++pc => 101
int *pi = 100; ++pi => 104 pi + 2 => 108
double *pd = 100; ++pd => 108 pi + 2 => 116
int function( int a, int *pi) #함수의 원형은 하나의 값만 반환(return), *pi의 경우 in/out 둘다 가능)
dangling reference : 허상참조, 컴퓨터 프로그래밍에서 유효한 객체를 가리키고 있지 않은 포인터
댓글