지역변수(local)와 전역변수(global)의 이해
구분: 선언된 위치에 따라.
1. 지역변수 : 함수안
2. 전역변수 : 함수바깥
지역변수와 전역변수의 유효범위(Scope)
지역변수이름이 같을 때 우선순위
변수의 생존기간과 저장위치
1. 전역변수: 프로그램이 시작과 함께 생성되어 종료시에 소멸된다.
2. 지역변수: 함수가 호출될 때 생성되어 함수 호출이 끝날 때 소멸된다.
저장위치
1. 코드영역 : 코드가 저장됨. readonly. 계속 살아있음.
2. 데이터영역 : 전역변수, 정적변수(static), 리터럴상수.
프로그램실행하는 동안 계속 살아있음.
3. 스택영역 : 지역변수, 매개변수(=지역변수)가 저장.
함수가 호출될 때 생성되었다가 함수호출이 끝나면 소멸.
4. 힙영역 : 프로그래머가 사용.
#include <stdio.h>
int global_var;
//전역변수: 함수바깥에 선언된 변수
//전역변수의 유효범위: 파일 전체
//특징 : 자동으로 디폴트값(0)으로 초기화됨.
//파일 어디서 수정하더라도 반영이 됨.
void change_global(int param)
//매개변수도 지역변수
{
int local_var=0; //0은 리터럴.
//지역변수
//지역변수의 유효범위: 지역변수가 선언된 함수내.
//따라서 다른함수에 같은이름의 변수가 있어도 상관없음.
//특징 : 자동으로 초기화되지 않는다. 초기화하지 않으면 결과를 예상할 수 없다.
global_var = 11111;
printf("4change_global함수내에서 local_var : %d\n", local_var);
//매개변수(지역변수) 를 변경하는 경우
//지역변수의 유효범위는 함수내이므로 메인으로 돌아갔을 때
//변경된 값이 영향을 주지 않는다.
//함수에서 값을 호출한 함수로(메인) 전달하고 싶을 때
//return을 사용해야 한다.
printf("5change_global함수내에서 param : %d\n", param);
param = -58;
printf("6change_global함수내에서 변경된 param : %d\n", param);
}
int main() //시작점.
{
int local_var = 1000;
int param = 200;
//지역변수: 함수 안쪽에 선언된 변수
printf("1global_var: %d\n", global_var);
printf("2main 함수내에서 local_var : %d\n", local_var);
printf("3main함수내에서 param : %d\n", param);
change_global(param); //함수로 갔다가 오는 것임.
printf("7global_var: %d\n", global_var);
printf("8main 함수내에서 local_var : %d\n", local_var);
printf("9main함수내에서 param : %d\n", param);
}
배열 (array)
배열의 사용이유: 대량의 데이터를 하나의 변수로 처리하기 위함.
메모리에서 배열의 형태
실제 저장된 값도 확인
#define SIZE 5
#include <stdio.h>
int main()
{
//배열 선언형식 : 데이터타입 변수이름[사이즈]
//배열 초기화
int num[SIZE]={0,} ; //초기화 방법
int i=0;
//값을 대입하는 방법:인덱스는 0부터 시작
//인덱스: 배열에서의 위치, 첫번째 원소인지, 두번째 원소인지.
//num[0] = 1; //첫번째 원소
num[1] = 2;
//num[2] = 10;
//num[3] = 20;
//num[4] = 12;
//num[5] = 2; //ERROR!. 선언한 배열의 갯수를 초과
//컴파일시 에러가 발생안함. run-time시 에러 발생
for (i=0; i < SIZE; i++ ) {
printf("%d \n", num[i] ); //배열읽기
}
printf("\n");
}
// 문제 : 배열
// 사용자로부터 임의의 정수 10개를 입력받아
// 가장 큰수를 찾는 프로그램을 배열을 이용해 작성하세요.
//문제 해결 순서
//1.초기화 및 선언 배열 10개
//2.출력 10개
//3.입력 10개
//4.가장큰수를 찾아서 출력
#include <stdio.h>
#define SIZE 5
main()
{
int num[SIZE] = {0,}; //initialze
int i =0;
int max=0;
printf("숫자 5개를 입력하세요\n");
for (i=0; i < SIZE ; i++) {
scanf("%d", &num[i]);
}
printf("입력된 숫자는: ");
for (i=0; i < SIZE ; i++) {
printf("%d ", num[i]);
}
//3,6,10,2,5와 max비교
for (i=0; i < SIZE ; i++) {
if (max <num[i])
max = num[i]; //문장이 하나면 블럭으로 처리안해도됨.
}
printf("최대값은 : %d\n", max);
}
'C언어 > 복습' 카테고리의 다른 글
[C언어]DAY10_2차원 배열 (0) | 2020.02.01 |
---|---|
[C언어]DAY8, 9_포인터, 배열이름의 의미와 인덱스 의미, 포인터와 배열이름 (0) | 2020.01.30 |
[C언어]DAY6_while(반복문), do whlie, 함수 (0) | 2020.01.28 |
[C언어]DAY5_다중(multiple) if, switch문, 단일 for문, 중복 for문 (0) | 2020.01.21 |
[C언어]DAY4_데이터 타입, if문 (0) | 2020.01.21 |