C언어_7
함수
변수의 범위
지역 변수
같은 이름이더라도 다른 지역({}
)의 함수에 속해 있으면 독립된 다른 변수이다. 지역({}
)이 끝나게 되면 스택메모리에서 소멸된다. 스택 메모리에서 관리되므로,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 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}
Author And Source
이 문제에 관하여(C언어_7), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gimmicks_/c7저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)