[C언어] 2. C언어 정리(2)
제가 책(윤성우의 열혈 C 프로그래밍)을 보다가 까먹었던 부분만 포스팅 하는 것입니다!
순서가 뒤죽박죽이어도 이해해주세요~~!
static 변수
지역변수에 static 선언이 붙게되면, 이는 전역변수의 성격을 지니는 변수가 됩니다.
원래 지역변수는,
- 선언된 함수 내에서만 접근이 가능하고,
- 함수 내에 선언된 지역변수는 해당 함수가 반환하면 소멸됩니다.
그런데 함수 내에 선언된 지역변수에 static 선언이 붙게되면,
- 선언된 함수 내에서만 접근이 가능하고(지역변수 특성)
- 딱 1회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재하게 됩니다.
선언은 다음과 같습니다~
static int num=0;
그리고 static으로 선언된 지역변수는 함수가 호출되어야 선언되는 것이 아니라
전역변수처럼 프로그램 시작과 동시에 할당 및 초기화되어 프로그램이 종료할 때까지 메모리 공간에 남아 있습니다.
NULL
문자열의 마지막엔 항상 NULL문자를 삽입하여야 합니다. (NULL문자가 없으면 문자배열)
NULL문자의 아스키코드는 0 입니다.
NULL 포인트도 0 입니다.
두가지 형태의 문자열 표현
문자열의 선언은 두 가지가 있습니다.
변수형태의 문자열 선언
char str1[]="My String";
상수형태의 문자열 선언
char *str2="Your String";
배열이름이 포인터이기에 str1은 문자열의 처음 문자인 M의 주소 값을 가지고 있습니다.
str2도 문자열의 처음 문자인 Y의 주소 값을 가지고 있습니다.
그러나 str2는 다른 문자열을 가리키게 변경할 수 있지만, str1는 변경할 수 없습니다.
그리고 str1은 str1[0]으로 문자 하나하나에 접근 가능하지만, str2는 접근 할 수 없습니다
포인터 배열
포인터 변수로 이뤄진, 그래서 주소 값의 저장이 가능한 배열을 가리켜 ‘포인트 배열’이라고 합니다.
선언은 다음과 같습니다
int* arr[10];
포인터 각각은 배열이름으로 사용될 수 있기에, 포인터배열은 배열들을 다루기에 용이합니다.
문자열을 저장하는 포인터 배열
char * str="hello"; //char형 포인터는 문자열을 저장 가능
char * strArr[3]={"simple","string","array"}; //char형 포인터배열은 문자열들을 저장
배열을 함수의 인자로 전달받는 방법
배열은 Call-by-refernce 방식으로 함수의 인자로 전달해야하죠~
그 방법은 두 가지 입니다.
void function(int *arr,int len);
void function(int arr[],int len); //더 자주 사용
배열의 주소 값을 인자로 전달받는 매개변수는 포인터 변수이기 때문에,
이를 대상으로 sizeof 연산을 할 경우 배열의 크기가 반환되지 않고
포인터 변수의 크기가 반환됩니다.
이렇듯 함수 내에서는 인자로 전달된 배열의 길이를 계산할 수 가 없기 때문에,
배열의 길이도 같이 인자로 전달해야 합니다.
포인터 대상의 const 선언
포인터가 가리키는 값을 상수화 할 때,
const int *ptr=#
*ptr=40; //컴파일 에러
포인터를 상수화 할 때,
int *const ptr=#
ptr=&num2; //컴파일에러
둘다 상수화 할 때
const int *const ptr=#