C언어_7

gimmicks_u·2022년 3월 31일
0

C언어

목록 보기
7/13
post-thumbnail

함수

변수의 범위

지역 변수

같은 이름이더라도 다른 지역({})의 함수에 속해 있으면 독립된 다른 변수이다. 지역({})이 끝나게 되면 스택메모리에서 소멸된다. 스택 메모리에서 관리되므로,FILO 성격을 가진다.

전역 변수

전역 변수는 프로그램이 시작하자 마자 메모리 상에 올라가서 프로그램이 종료될 때 메모리 상에서 소멸된다. 전역 변수는 스택 메모리가 아닌 데이터 메모리에서 관리된다.

static 변수

지역 변수처럼 중괄호 영역에서 선언되지만, 중괄호를 벗어나도 메모리 상에 고정되어 소멸되지 않는 변수. 지역 변수와 전역 변수의 속성을 모두 갖고있다.

//1
#include <stdio.h>

void func(void);

int main(void)
{
    int i = 0;
    while(i < 5)
    {
        func();
        i++;
    }
    return 0;
}

void func(void)
{
    int value = 0;
    value++;
    printf("%d번\n", value);
}
1번
1번
1번
1번
1번
//2
#include <stdio.h>

void func(void);

int main(void)
{
    int i = 0;
    while(i < 5)
    {
        func();
        i++;
    }
    return 0;
}

void func(void)
{
    static int value = 0;
    value++;
    printf("%d번\n", value);
}
1번
2번
3번
4번
5번

1번 코드의 경우 func(void) 함수 내에서 선언된 value변수가 함수가 호출될 때마다 초기화되고, 호출이 끝날 때마다 소멸되지만, 2번 코드의 static int로 선언된 value는 함수가 끝나더라도 소멸되지 않는다.

전역변수와 다르게 static으로 선언된 변수는 메모리는 살아있고 유지되지만, 다른 함수(다른 중괄호 안)에서 변수를 사용할 수는 없다.

배열

기본

int a[100];
배열타입 배열이름[배열길이];

배열의 길이는 무조건 상수로 선언해야한다.

int size = 5;
int array[size]; // 컴파일 오류 발생

학생들의 점수를 배열에 입력받아 총점과 평균을 출력하는 예제

#include <stdio.h>

int main()
{
    int students[3];
    int size_std = sizeof(students) / sizeof(int);
    int i, sum = 0;

    for(i = 0; i < size_std; i++)
    {
        printf("%d 번째 학생의 점수를 입력하세요 : ", i + 1);
        scanf("%d", &students[i]);
        sum += students[i];
    }

    printf("총점 : %d\n", sum);
    printf("평균 : %d\n", sum / size_std);
}

배열의 초기화

  • 배열의 길이보다 초기값의 개수가 적은 경우, 나머지의 배열은 0으로 채워진다.
  • 배열의 길이보다 초기값의 개수가 많은 경우, 오버플로우 에러가 난다.
  • 배열의 길이를 선언하지 않은경우, 초기값의 개수가 길이가 된다.
int arr[] = {1, 2, 3, 4, 5}
profile
Done is better than perfect

0개의 댓글