https://codebunny99.tistory.com/122
CPU 메모리에 대해 학습하기
(형식) 변수 = 데이터 =을 기준으로 왼쪽은 변수, 오른쪽은 데이터라고 한다. count = 3 코드 (Code) 영역:프로그램의 "요리책"이라고 생각할 수 있다.요리책에는 요리 방법(명령어)들이 적혀
codebunny99.tistory.com
변수의 속성
- 이름, 타입, 크기, 값 + 범위, 생존시간, 연결
범위(scope) : 변수가 사용 가능한 범위, 가시성
생존 시간(lifetime) : 메모리에 존재하는 시간
연결(linkage) : 다른 영역에 있는 변수와의 연결 상태
변수의 범위(scope) : 전역변수와 지역변수
//---------전역변수의 범위 시작----------
#include<stdio.h>
int A; //전역변수. 초기값은 0
int B; //전역변수. 초기값은 0
int add()
{
return A + B;
}
int main()
{
int answer; //지역변수
//---------지역변수의 범위 시작----------
A = 5;
B = 7;
answer = add();
printf("%d + %d = %d\n", A, B, answer);
//---------지역변수의 범위 끝----------
//---------전역변수의 범위 끝----------
return 0;
}
전역 변수 Global Variables
- 전역 변수는 함수 외부에서 선언된 변수로, 프로그램의 모든 함수에서 접근 가능하다
- 전역 변수의 범위는 소스파일 전체이다.
- 전역 변수는 프로그램의 전체 수명 동안 존재하며, 특정 메모리 영역에 저장된다
- 변수는 디폴트로 0으로 초기화되어있지만, 기본적으로 초기화 시키는 것이 좋다.
지역 변수 Local Variables
- 지역 변수는 함수나 블록 내에서 선언된 변수로, 선언된 함수나 블록에서만 접근 가능하다.
- 지역 변수는 해당 블록이 실행될 때 생성되고, 블록이 종료되면 소멸된다.
- C 언어에서 지역 변수는 기본적으로 연결이 없다. 즉, 다른 파일이나 다른 블록에서 접근할 수 없는 고유한 변수이다.
- 변수를 0으로 초기화하여야 한다.
지역 변수를 초기화하는 이유
- 지역 변수는 선언된 함수나 블록이 실행될 때 메모리에 할당된다. 이 때, 초기화되지 않은 지역 변수는 이전에 사용한 메모리의 값(쓰레기 값)을 가지고 있을 수 있다. 이 값을 사용하면 예상치 못한 결과를 초래할 수 있다.
- 초기화된 지역 변수는 예측 가능한 값을 가지고 있다. 이는 프로그램의 동작을 예측하기 쉽게 만들어주며, 버그를 찾고 수정하는 데 도움이 된다.
# 매개변수도 일종의 지역변수이다.
- 매개변수와 지역 변수 모두 스택 메모리(stack memory)에 저장된다.
#include <stdio.h>
int inc(int counter);
int main(void)
{
int i;
i = 10;
return 0;
}
void inc(int counter){ //매개변수도 일종의 지역변수
counter++;
}
매개변수의 특징
- 함수 호출 시 매개변수가 스택 프레임에 할당되고, 함수 종료 시 해당 프레임이 제거되면서 변수도 제거된다.
- 매개변수는 함수 호출 시 전달된 값으로 초기화됩니다. 호출자가 전달한 값이 매개변수의 초기값이 된다.
- 그러므로 함수 외부에서 접근할 수 있는 방법이 제한된다. 일반적으로는 함수 내부에서만 사용된다.
가변 매개 변수
- 매개변수의 개수가 가변적으로 변할 수 있는 기능
- int sum ( int num, ... ) 과 같이 쓴다.
#include <stdio.h>
#include <stdarg.h> // 가변 변수를 처리할 수 있게 임포트
int sum (int, ...);
int main(void)
{
int answer = sum(4, 4, 3, 2, 1); // 변수 개수 상관 x
printf("합은 %d입니다\n", answer);
return(0);
}
int sum( int num, ... ) // 가변 변수 처리 함수
{
int answer = 0;
va_list argptr;
va_start(argptr, num);
for ( ; num > 0 ; num-- )
answer += va_arg( argptr, int );
va_end( argptr );
return( answer );
}
'C Language' 카테고리의 다른 글
C언어 재귀적 알고리즘 : 하노이 탑 문제 (0) | 2024.06.19 |
---|---|
C언어 static, register, volatile 지정자 개념 (2) | 2024.06.19 |
C언어 사용자 정의 함수 (0) | 2024.06.19 |
C언어 라이브러리의 rand() 함수 (0) | 2024.06.18 |
C언어 Basic 반복문 while, for 개념 (0) | 2024.06.18 |