본문 바로가기

C언어/복습

[C언어]DAY7_지역변수, 전역변수, 배열

지역변수(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);
}