1. auto, register, static 예약어
종류 | 지역 변수 | 전역 변수 | |||
예약어 | auto | register | static | 없음 | static |
선언 위치 | 코드 블록 내부 | 함수 외부 | |||
사용 범위 | 선언 ~ 선언한 블록 끝 | 프로그램 전체 | 하나의 파일 내부 | ||
메모리 존재 기간 | 선언 ~ 선언한 블록 끝 | 프로그램 시작 ~ 종료 | |||
자동 초기화 | 없음 | 0으로 자동 초기화 | |||
메모리 위치 | 스택 영역 | 레지스터 | 데이터 영역 |
2. 지역 변수의 주소 반환
int *get_num(void)
{
int n;
scanf("%d", &n);
return (&n);
}
이런 식으로 반환하게 된다면 지역변수의 주소를 반환하기 때문에 에러 메시지를 보낸다. 왜냐하면 이 작업 이후 get_num 함수가 종료되면 n이 할당받았던 메모리를 반환하게 되고, 이 공간을 언제 사용하게 될지 몰라 수정될 가능성이 크기 때문입니다.
'C언어' 카테고리의 다른 글
[혼공C] 15-1 2차원 배열의 요소를 참조하는 원리 (feat. 극혐 이중 포인터, 배열 포인터, 포인터 배열) (0) | 2021.10.12 |
---|---|
[혼공C] 목차 정리 (0) | 2021.10.11 |
[혼공C] string.h 헤더파일 내장 함수 구현(strlen, strncpy, strncat, strcpy) (0) | 2021.10.09 |
[혼공C] 12-2 대입 연산자를 사용한다면 배열 선언과 동시에 문자열 초기화는 국룰 (0) | 2021.10.08 |
[혼공C] 12-1 gets 함수를 사용한 문자열 입력(puts, fgets, fputs) (0) | 2021.10.07 |