자동변수(지역변수)

- 하나의 함수 내부에 선언한 변수

- 변수의 기억공간이 할당되는 시점은 각 변수가 속해 있는 함수가 호출되어 실행될 때이다

 

예제)13-1

메인함수에서 두 수를 입력받아 곱하는 프로그램

곱하는 작업은 리턴값이 없는 함수를 이용

#include <stdio.h>


void func(int *, int *, int *);     //함수선언

 

int main(){

int a, b, c;

 

printf("두 수를 입력하세요");
scanf_s("%d %d", &a, &b);

 

func(&a, &b, &c);
printf("%d", c);

 

return 0;

}

 

void func(int* a, int* b, int* c){
    *c = (*a)*(*b);   //두 변수 a,b를 곱한 값을 c에 대입한다.
}

 결과)


 

 

정적변수

- 기억공간의 생성과 초기화가 함수의 호출 횟수에 영향을 받지 않는 변수

- 선언 방법 ex) static int sum;

 

예제)13-2

메인에서 배열요소값 출력하는 프로그램

함수가 호출될 때마다 배열요소값 차례로 리턴하는 함수 이용

#include <stdio.h>

 

int* func();    //함수 선언

 

int main(){
    int i;
    int* p;
    for (i = 0; i < 5; i++){
        p = func();    //함수 대입
        printf("%d번째 배열 요소 : %d\n",(i+1), *p);    //배열 출력
    }
    

return 0;

}

 

int* func(){
    int array[] = { 1, 2, 3, 4, 5 };
    static int sum = 0;   //정적변수 선언
    sum++;
    return &array[sum-1];    //배열에 저장된 값 리턴
}

결과)



 

 

외부변수

- 변수를 함수 밖에서 선언한다.

 

예제)13-3

get_next 함수 : 현재 배열 요소의 값을 리턴하고 다음 배열 요소로 이동

get_before 함수 : 현재 배열 요소의 값을 리턴하고 이전 배열 요소로 이동

#include <stdio.h>

 

int array[] = { 1, 2, 3, 4, 5 };    //배열 선언

 

int get_next();        //함수 선언
int get_before();    //함수 선언

 

static int sum = 0;  //외부변수 선언

 

int main(){
 

printf("next함수 호출 : %d\n",get_next());

printf("next함수 호출 : %d\n", get_next());   
    

sum++;

 

printf("before함수 호출 : %d\n", get_before());
printf("before함수 호출 : %d\n", get_before());

 

return 0;

 

}

 

int get_next(){
    sum++;    //배열 인덱스 증가
    return array[sum-1];
}

 

int get_before(){
    sum--;    //배열 인덱스 감소
    return array[sum];
 
}

결과)

 

 

포인터 배열

- 포인터변수들로 만들어진 배열(문자열 상수)

 

예제)14-4

포인터배열을 사용해 가장 긴 단어 출력하기

#include <stdio.h>
#include <string.h>

 

int main(){

 

char* array[] = { "dog", "elephant", "monkey", "rabbit", "tiger" };   //포인터배열 선언
int i, j;
char* max = array[0];

for (i = 0; i < 5; i++){    //max보다 길이가 긴 배열요소를 max에 대입한다.
    if (strlen(array[i]) > strlen(max)) max = array[i];    //strlen() : 문자열 사이즈 측정함수
}
 
printf(max);
printf("\n");

 

return 0;

}

결과)

 

 

'Programming > C' 카테고리의 다른 글

C언어 정리(8)  (0) 2015.08.09
C언어 정리(7)  (0) 2015.08.07
C언어 정리(5)  (0) 2015.07.20
C언어 정리(4)  (0) 2015.07.20
C언어 정리(3)  (0) 2015.07.20

+ Recent posts