C 언어의 변수 역할 영역,링크 와 저장 기간 의 의 미 를 깊이 분석 합 니 다.
1.저장 기한:변수의 저장 기한 은 변수 가 사용 하 는 메모리 공간 이 언제 방출 되 는 지 결정 합 니 다.동적 저장 기한 을 가 진 변 수 는 소속 프로그램 블록 이 실 행 될 때 메모리 공간 을 얻 고 끝 날 때 메모리 공간 을 방출 합 니 다.정적 저장 기한 이 있 는 변 수 는 프로그램 이 실행 되 는 동안 메모리 공간 을 차지 합 니 다.
2.역할 영역:변 수 는 블록 역할 영역 도 있 고 파일 역할 영역 도 있 습 니 다.제1장 첫 번 째 그림 과 결합 하면 블록 역할 영역 이 특정한 프로그램 블록 에서 작용 하고 파일 역할 영역 은 전체 c 파일 에서 작용 한 다 는 것 을 알 수 있 습 니 다.
3.링크:링크 는 각 파일 간 의 관계 로 내부 링크 를 가 진 변 수 는 본 파일 에서 만 역할 을 하고 외부 링크 를 가 진 변 수 는 서로 다른 파일 에서 역할 을 할 수 있 습 니 다.링크 가 없 는 변 수 는 한 파일 의 한 함수 에서 만 작 동 합 니 다.
C 변수 역할 영역,링크 와 저장 기간 의 의미
잘못된 정의 C 언어 변수의 역할 영역,링크 와 저장 영역 은 어느 정도 에 프로그램의 디자인 에 직접적인 영향 을 줄 수 있 습 니 다.우 리 는 이 박문 을 통 해 C 변 수 를 정확 하고 합 리 적 으로 정의 하 는 방법 을 소개 합 니 다.
C 변 수 를 정의 하 는 것 부터 C 고수 가 됩 니 다.
1.기본 용어
1.1 대상 이 무엇 인지(object)
C 언어의 대상 의 의 미 는 C++와 완전히 다르다.C 언어의 대상 은 데 이 터 를 저장 하 는 메모 리 를 가리킨다.대상 은 하나 이상 의 값 을 저장 할 수 있 습 니 다.한 대상 은 실제 값 을 저장 하지 않 았 을 수도 있 지만 적당 한 값 을 저장 할 때 반드시 해당 하 는 크기 를 가 집 니 다.대상 은 프로그램의 실행 기간 에 존재 할 수도 있 고 그 함수 의 실행 기간 에 만 존재 할 수도 있다.
1.2 식별 자(identifier)가 무엇 입 니까?
식별 자 는 하나의 이름 으로 이 식별 자 를 통 해 대상 의 내용 을 수정 할 수 있다.식별 자 는 소스 코드 의 다 중 파일 에서 공유 할 수 있 고 특정한 파일 에 사용 할 수 있 는 임 의 함수 에서 만 사용 할 수 있 으 며 심지어 함수 중의 일부분 에서 만 사용 할 수 있다.
예 를 들 어 int 형 변수 point 를 정의 합 니 다.
int point;
대상 과 식별 자의 관 계 는 다음 과 같다.2.역할 영역,링크 와 저장 기간 의 3 자 관계
저장 기간 은 대상 을 설명 하 는 데 쓰 인 다.저장 기간 이란 대상 이 메모리 에 얼마나 오래 보관 할 수 있 는 지 를 말한다.
식별 자 는 대상 에 접근 하 는 데 사 용 됩 니 다.역할 영역(scope)과 링크(linkage)를 사용 하여 식별 자 를 설명 합 니 다.식별 자의 역할 영역 과 링크 는 프로그램의 어떤 부분 을 사용 할 수 있 는 지 보 여 줍 니 다.
3.역할 영역 에 대한 상세 한 설명
역할 도 메 인 설명 프로그램 에서 식별 자 에 접근 할 수 있 는 영역
하나의 C 변수의 역할 영역 은 블록 역할 영역,함수 역할 영역,함수 원형 역할 영역 과 파일 역할 영역 일 수 있 습 니 다.다음은 모든 역할 영역의 의 미 를 상세 하 게 설명 하 겠 습 니 다.
3.1 블록 역할 영역
블록 은 괄호 로 묶 은 코드 영역 으로 블록 에 있 는 변 수 를 블록 역할 영역 으로 정의 합 니 다.블록 역할 영역 변수의 보 이 는 범 위 는 정의 에서 이 정 의 를 포함 하 는 블록 의 끝 입 니 다.
또한 함수 의 형식 매개 변 수 는 함수 의 왼쪽 괄호 앞 에 있 지만 블록 역할 도 메 인 을 가지 고 함수 체 라 는 블록 에 속 합 니 다.
int Star_CongShanRuoShui(int user_id)
{
int res = 0;
......
return
}
👆위 코드 중"user"id"와"res"는 모두 블록 역할 영역 을 가지 고 있 습 니 다.
int Star_CongShanRuoShui(int user_id[] , int n)
{
int res = 0;
for(int i=0;i<n;++i)
{
......
int q=0; //q
......
} //q
......
return
}
👆위의 code 에서 변수"q"의 역할 영역 은 for 순환 순환 체 에 만 제 한 됩 니 다.3.1.1 블록 개념의 확장
C99 는 블록 개념 을 for 순환,while 순환,do while 순환 과 if 문 구 를 포함 하여 제어 하 는 코드 로 확장 합 니 다.이 코드 들 이 괄호 로 묶 이지 않 아 도 블록 의 일부분 이 고 아래 의 code 라 고 할 수 있 습 니 다.👇
#include<stdio.h>
int main()
{
int Star_CSRS = 8;
printf("[main] value of Star_CSRS is %d | address of Star_CSRS:%p
",
Star_CSRS ,&Star_CSRS);
for(int Star_CSRS=0;Star_CSRS<4;++Star_CSRS)
{
printf("[for index] value of Star_CSRS is %d | address of Star_CSRS:%p
",
Star_CSRS ,&Star_CSRS);
int Star_CSRS = 6;
printf("[for] value of Star_CSRS is %d | address of Star_CSRS:%p
",
Star_CSRS ,&Star_CSRS);
++Star_CSRS;
}
printf("[main] value of Star_CSRS is %d | address of Star_CSRS:%p
",
Star_CSRS ,&Star_CSRS);
return 0;
}
출력 은 다음 과 같 습 니 다:3.2 함수 역할 영역
함수 역할 영역의 개념 은 goto 문장의 라벨 에 만 한 정 됩 니 다.이것 은 하나의 태그 가 함수 의 내부 블록 에 처음 나타 나 더 라 도 그 역할 영역 은 전체 함수상세 한 것 은 나의 이 박문 을 참고 할 수 있다.로 연장 된다 는 것 을 의미한다.
3.3 함수 원형 작용 영역
함수 원형 에 사용 할 형 삼 변수 이름 은 다음 과 같 습 니 다.
int Star_CongShanRuoShui(int user_id);
함수 원형 작용 역 의 범 위 는 형 삼 정의 에서 원형 성명 으로 끝난다.함수 원형 중의 형 삼 컴 파일 러 는 형 삼 유형 에 만 관심 을 가지 고 구체 적 인 형 삼 명 과 관계 가 없 으 며 형 삼 명 이 있어 도 함수 정의 중의 형 삼 명 과 일치 할 필요 가 없다.길 어 지 는 배열 에서 만 형 삼 명 이 의미 가 있 고 다음 과 같다길 어 지 는 배열 은 나의 이 박문 을 상세 하 게 참고 한다..
int Star_CongShanRuoShui(int n ,int user_id[n]);
3.4 파일 역할 영역모든 함수 밖의 변 수 를 파일 역할 영역 으로 정의 합 니 다.파일 역할 도 메 인 을 가 진 변 수 는 정의 에서 이 정의 가 있 는 파일 의 끝 까지 모두 볼 수 있 습 니 다(파일 역할 도 메 인 변 수 는 전역 변수 라 고도 합 니 다).
번역 부 와 파일
컴 파 일 러 는 원본 코드 파일 과 모든 헤더 파일 을 정 보 를 포함 하 는 단독 파일 로 봅 니 다.이 파일 은 번역 단원 이 라 고 불 립 니 다.원본 코드 파일 과 include 파일 을 포함 하 는 번역 단원 입 니 다.만약 프로그램 에 여러 개의 원본 코드 파일 이 있다 면,그러면 이 프로그램 도 여러 개의 번역 단원 이 있 을 것 입 니 다.하나의 파일 역할 도 메 인 변 수 를 볼 수 있 는 범 위 는 전체 번역 단원(하나의 소스 코드 파일+헤더 파일)입 니 다.
4.링크 상세 설명
C 변 수 는 3 개의 링크 속성 이 있 습 니 다.링크 없 음,내부 링크,외부 링크
4.1 링크 없 음
블록 역할 영역,함수 역할 영역 과 함수 원형 역할 영역 을 가 진 변 수 는 모두 링크 변수 가 없습니다.이것 은 이러한 변 수 는 블록,함수 또는 원형 을 정의 하 는 것 에 속 한 다 는 것 을 의미한다.
4.2 내부 링크
내부 링크 변 수 는 한 번역 단원 에서 만 사용 할 수 있 습 니 다.이 변 수 는 저장 분류 설명자 static 수식 을 사용 합 니 다.다음 과 같 습 니 다.
int Star_CSDN=1; // ,
static int Star_CongShanRuoShui=2; // ,
int main()
{
......
return 0
}
4.3 외부 링크외부 링크 변 수 는 여러 파일 에서 사용 할 수 있 습 니 다.외부 링크 변수의 성명 은'정의 성 성명'과'인용 성 성명'으로 나 뉜 다.C 컴 파 일 러 는 하나의 변 수 를 한 번 만 정의 할 수 있 도록 요구 하 며,중복 정의 컴 파 일 러 는 오 류 를 보고 할 수 있다.다른 파일 에서 외부 링크 변 수 를 사용 하려 면 다음 cdoe 와 같은 extern 참조 성명 을 사용 해 야 합 니 다.
//file a.c
// a.c Star_CongShanRuoShui
int Star_CongShanRuoShui = 2;
......
//file b.c
// b.c extern Star_CongShanRuoShui
extern int Star_CongShanRuoShui;
......
5.저장 기간 상세 설명C 대상 은 4 가지 저장 기간 이 있 습 니 다.정적 저장 기간,스 레 드 저장 기간,자동 저장 기간,동적 분배 저장 기간 입 니 다.
5.1 정적 기억 장치
정적 저장 소 가 있 는 대상 은 프로그램의 실행 기간 동안 계속 존재 합 니 다.파일 역할 영역 변 수 는 정적 저장 기 를 가지 고 있 습 니 다.
파일 역할 영역 변수 에 대해 키워드 static 은 저장 기간 이 아 닌 링크 속성 을 표시 합 니 다.static 로 설 명 된 파일 역할 도 메 인 변 수 는 내부 링크 속성 을 가지 지만 내부 링크 든 외부 링크 든 모든 파일 역할 도 메 인 변 수 는 정적 저장 기 를 가지 고 있 습 니 다.
5.2 스 레 드 기억 장치
스 레 드 저장 기 는 병렬 프로 그래 밍 에 사용 되 며,프로그램 실행 은 여러 스 레 드 로 나 눌 수 있 습 니 다.스 레 드 저장 기간 이 있 는 대상 은 성명 되 었 을 때 부터 스 레 드 가 끝 날 때 까지 계속 존재 합 니 다.키워드 로Thread_local 에서 대상 을 설명 할 때 모든 스 레 드 는 이 변수의 개인 백업 을 받 습 니 다.
5.3 자동 기억 장치
블록 역할 영역의 변 수 는 일반적으로 자동 저장 기간 을 가지 고 있다.프로그램 이 이 변 수 를 정의 하 는 블록 에 들 어 갈 때 이 변수 에 메모 리 를 할당 합 니 다.이 블록 을 종료 할 때,방금 이 변수 들 을 위 한 메모 리 를 방출 합 니 다.이런 방법 을 통 해 메모리 의 중복 이용 을 실현 할 수 있다.
길 어 지 는 배열 은 예외 가 있 습 니 다.저장 기간 은 성명 에서 블록의 끝 까지 이지 블록의 시작 에서 블록의 끝 까지 가 아 닙 니 다.
위 에서 말 했 듯 이 블록 역할 영역의 변 수 는 보통 자동 저장 기 를 가지 지만 정적 저장 기 를 가 질 수 있다.이러한 변 수 를 만 들 기 위해 서 는 변 수 를 블록 에 설명 하고 성명 전에 키워드 static 를 추가 해 야 합 니 다.다음 과 같 습 니 다.
int Star_CongShanRuoShui(int user_id)
{
static int isStar = 0;
......
return
}
변수 isStar 는 정적 메모리 에 저 장 됩 니 다.프로그램 이 불 러 올 때 부터 프로그램 이 끝 날 때 까지 존재 합 니 다.그러나 그 역할 영역 은 StarCongShanRuoShui()함수 블록 에서 이 함 수 를 실행 할 때 만 프로그램 이 isStar 를 사용 하여 지정 한 대상 에 접근 할 수 있 습 니 다(물론 이 변수의 주 소 를 저장 하여 간접 적 으로 이 대상 에 접근 할 수 있 습 니 다)5.4 동적 분배 기억 장치
프로그램 이 실 행 될 때 malloc()등 메모리 분배 함 수 를 통 해 분 배 된 대상 은 동적 분배 저장 기간 을 가지 고 있 으 며,이러한 대상 은 free()함 수 를 사용 하여 소각 해 야 한다.
동적 메모리 할당 과 길 어 지 는 배열 은 기능 적 으로 겹 치지 만 다 릅 니 다.
길 어 지 는 배열 은 자동 저장 형식 으로 malloc 함수 로 만 든 배열 로 한 함수 에 국한 되 지 않 아 도 됩 니 다.
이상 은 C 언어 중의 변수 역할 도 메 인,링크 와 저장 기의 의 미 를 깊이 있 게 분석 하 는 상세 한 내용 입 니 다.C 언어 변수 역할 도 메 인,링크 와 저장 기간 에 관 한 자 료 는 우리 의 다른 관련 글 에 관심 을 가 져 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.