MW LAB
C 기초 정리 본문
# 서식문자
16진수 : %#x / 8진수 : &#o
필드폭 지정 : %8d(필드폭 8칸 확보, 오른쪽 정렬), %-8d(오른쪽 정렬)
float, double, long double 데이터 출력 : %f, %f, %Lf
float, double, long double 데이터 입력 : %f, %lf, %Lf
#상수 (리터럴 상수/ 심볼릭 상수)
상수 : 변경이 불가능한 데이터 (선언과 동시에 초기화)
리터럴 상수 : int num = 30+40; // 메모리상에 상수의 형태로 30 , 40 저장된후 덧셈, 70 이 num 에 저장
심볼릭 상수 : const int MAX = 100; // 선언과 동시에 초기화 해야함 아니면 쓰레기값 저장됨
# 함수에서 return 의 2가지 의미
함수의 반환 값이 void => 함수를 빠져나간다.
함수의 반환 값이 존재 => 변수를 반환한다.
# 재귀함수
# 변수의 존재기간과 접근범위
지역변수(Local Variable) : 함수 내에만 존재 및 접근 가능, 함수 호출시 생성/ 함수 종료시 소멸 (매개변수 포함)
전역변수 : 프로그램 시작시 생성 및 메모리 할당/ 종료시 소멸 / 초기화 없을시 0으로 초기화됨 / 프로그램 전체에서 접근 가능
static 변수(함수의 지역변수에 static 선언) : 선언된 함수 내에서만 접근 가능/ 1회 초기화 되고 프로그램 종료 시까지 메모리 공간에 존재
register 변수 : CPU 내의 레지스터에 저장될 확률을 높임
# 문자열 / 문자열 배열
문자열의 끝에는 ‘null 문자’ = ‘\0’ = 아스키코드 ‘0’ 이 붙는다.
%s : 문자열 입력 서식문자
char str[50] = “hello” 로 선언하면 자동으로 뒤에 null 문자 삽입됨
char str[] = {‘h’,‘i’} 는 문자열 배열
# scanf 데이터 구분짓는 기준 = 공백
# 포인터 변수(int)의 크기
4바이트(32비트) 시스템에선 4byte
8바이트(64비트) 시스템에선 8byte
# 포인터 형의 존재 이유 (메모리 공간을 참조하는 기준)
포인터의 타입에 따라
int => 저장된 주소를 기준 4바이트를 읽어들인다.
double => 저장된 주소를 기준 8바이트를 읽어들인다.
예제) int *ptr 선언시 ptr+1은 4바이트 뒤의 메모리 참조
double * ptr 선언시 ptr+1은 8바이트 뒤의 메모리 참조
int arr[3] 선언시 arr+1은 4바이트 뒤의 메모리 참조
# 연산자(*,&)
* => 포인터가 가리키는 메모리르 참조하는 연산자
& => 변수의 주소값을 반환하는 연산자
# 배열-포인터
배열의 이름은 포인터(상수 형태의 포인터[주소값 변경 불가])
arr[i] == *(arr+i)
# NULL 포인터
int *ptr = 125; // 메모리 주소 125에 저장된 값이 무엇인지 모르기 때문에 오류 가능성!
int *ptr = 0;
int *ptr = NULL;
# 상수 형태의 문자열을 가리키는 포인터
# 큰따옴표로 묶여서 표현되는 문자열은 주소값을 반환
char * ptr =“hi”; printf(ptr);
# 함수의 인자로 배열 전달
배열의 포인터와 길이를 전달
'Study > C' 카테고리의 다른 글
[펌]유니코드란 무엇일까? 유니코드 != 아스키코드 (1) | 2017.03.19 |
---|---|
포인터 [part2] - 더블포인터와 포인터 swap (0) | 2017.01.18 |
포인터 [part1] (0) | 2017.01.17 |