c와 c++의 컨텍스트에서 static 변수, auto 변수, global 변수 및 local 변수의 차이
제가 좀 static
,auto
,global
★★★★★★★★★★★★★★★★★」local
수입니니다다
선가 ...static
변수는 함수 내에서만 액세스할 수 있지만 함수가 반환된 후에도 여전히(메모리에 저장됨) 존재합니다.
저는 또 '아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.local
가 있을까요?러면면 어이? ???? ????
여기에는 다음 두 가지 개념이 있습니다.
- scope: 이름에 액세스할 수 있는 위치를 결정합니다.
- 저장 기간: 변수가 생성 및 삭제되는 시기를 결정합니다.
로컬 변수(패디하게 블록 범위를 가진 변수)는 선언된 코드 블록 내에서만 액세스할 수 있습니다.
void f() {
int i;
i = 1; // OK: in scope
}
void g() {
i = 2; // Error: not in scope
}
글로벌 변수(파일 범위(C) 또는 네임스페이스 범위(C++)를 가진 변수)는 선언 후 언제든지 액세스할 수 있습니다.
int i;
void f() {
i = 1; // OK: in scope
}
void g() {
i = 2; // OK: still in scope
}
(C++에서는 네임스페이스를 닫았다가 다시 열 수 있고 현재 이외의 스코프에 액세스할 수 있으며 이름에도 클래스 스코프가 있을 수 있기 때문에 상황은 더욱 복잡합니다.하지만 그것은 매우 주제에서 벗어나고 있습니다.)
자동 변수(자동 저장 기간이 있는 변수)는 실행이 범위를 벗어나면 수명이 끝나는 로컬 변수이며 범위를 다시 입력하면 다시 생성됩니다.
for (int i = 0; i < 5; ++i) {
int n = 0;
printf("%d ", ++n); // prints 1 1 1 1 1 - the previous value is lost
}
정적 변수(정신적으로, 정적 저장 기간이 있는 변수)의 수명은 프로그램이 끝날 때까지 지속됩니다.로컬 변수인 경우 실행이 범위를 벗어나도 값이 유지됩니다.
for (int i = 0; i < 5; ++i) {
static int n = 0;
printf("%d ", ++n); // prints 1 2 3 4 5 - the value persists
}
에 주의:static
키워드에는 정적 저장 기간 외에 다양한 의미가 있습니다.글로벌 변수 또는 함수에서는 다른 변환 단위에서 액세스할 수 없도록 내부 링크를 제공합니다.C++ 클래스 멤버에서는 개체당 인스턴스가 아닌 클래스당 인스턴스가 하나씩 있음을 의미합니다.또한 C++에서는auto
키워드는 더 이상 자동 저장 기간을 의미하지 않습니다. 이제 변수의 이니셜라이저에서 추론된 자동 유형을 의미합니다.
, 이것은 되어 있기 .
이러한 변수는 변수를 생성하는 특정 함수 내부에만 존재합니다.다른 기능이나 메인 프로그램에는 알려져 있지 않습니다.이와 같이, 통상은 스택을 사용해 실장됩니다.로컬 변수를 생성한 함수가 완료되면 로컬 변수는 더 이상 존재하지 않습니다.함수가 실행되거나 호출될 때마다 다시 생성됩니다.
이러한 변수는 프로그램을 구성하는 모든 기능을 통해 액세스할 수 있습니다(알려진 변수입니다.메모리 위치를 변수 이름과 관련지어 실장합니다.기능이 호출되어도 재생성되지 않습니다.
/* Demonstrating Global variables */
#include <stdio.h>
int add_numbers( void ); /* ANSI function prototype */
/* These are global variables and can be accessed by functions from this point on */
int value1, value2, value3;
int add_numbers( void )
{
auto int result;
result = value1 + value2 + value3;
return result;
}
main()
{
auto int result;
value1 = 10;
value2 = 20;
value3 = 30;
result = add_numbers();
printf("The sum of %d + %d + %d is %d\n",
value1, value2, value3, final_result);
}
Sample Program Output
The sum of 10 + 20 + 30 is 60
선언을 신중하게 배치함으로써 글로벌 변수의 범위를 제한할 수 있습니다.선언에서 현재 소스 파일이 끝날 때까지 볼 수 있습니다.
#include <stdio.h>
void no_access( void ); /* ANSI function prototype */
void all_access( void );
static int n2; /* n2 is known from this point onwards */
void no_access( void )
{
n1 = 10; /* illegal, n1 not yet known */
n2 = 5; /* valid */
}
static int n1; /* n1 is known from this point onwards */
void all_access( void )
{
n1 = 10; /* valid */
n2 = 3; /* valid */
}
★★★
정적 개체는 생성된 시점부터 프로그램이 끝날 때까지 지속되는 개체입니다.을 사용하다그러나 글로벌 개체, 네임스페이스 범위의 개체, 클래스/함수 내에서 정적으로 선언된 개체 및 파일 범위에서 선언된 개체는 정적 개체에 포함됩니다.정적 개체는 프로그램 실행이 중지되면 삭제됩니다.
이 튜토리얼 리스트를 보시기 바랍니다.
AUTO :
C, C++
(자동 변수라고 불립니다).
코드 블록 내에서 선언된 모든 변수는 기본적으로 자동이지만 auto 키워드를 사용하여 명시할 수 있습니다.[주 1] 초기화되지 않은 자동변수는 해당 유형의 유효한 값을 할당할 때까지 정의되지 않은 값을 가집니다.[1]
auto 대신 스토리지 클래스 레지스터를 사용하는 것은 컴파일러가 프로세서 레지스터에 변수를 캐시하기 위한 힌트입니다.참조 연산자(&)가 변수 또는 그 하위 컴포넌트에 사용되는 것을 허용하지 않는 것 외에 컴파일러는 힌트를 자유롭게 무시할 수 있습니다.
C++에서는 자동변수의 생성자가 실행이 선언 위치에 도달하면 호출된다.소멸자는 지정된 프로그램 블록의 끝에 도달하면 호출됩니다(프로그램 블록은 중괄호로 둘러싸여 있습니다).이 기능은 파일을 열고 자동으로 닫거나 메모리를 비우는 등의 리소스 할당 및 할당 해제를 관리하는 데 자주 사용됩니다.Wikipedia 참조
static
C및 C 단어입니다. static
함수의 컨텍스트에서 변수는 콜 간에 값을 유지하는 변수입니다.이치노
로컬 변수는 함수의 수명 동안 또는 그 주변 범위가 무엇이든 간에 유지됩니다.예를 들어 다음과 같습니다.
void foo()
{
int i, j, k;
//initialize, do stuff
} //i, j, k fall out of scope, no longer exist
이 스코핑이 의도적으로 사용되는 경우가 있습니다.{ }
★★★★
{
int i, j, k;
//...
} //i, j, k now out of scope
글로벌 변수는 프로그램 기간 동안 존재합니다.
auto
C++로 하다 auto
C는 로컬 변수를 지정하는 (여유한) 방식입니다.에서는 C++11 입니다.auto
이제 값/표현의 유형을 자동으로 도출하기 위해 사용됩니다.
변수가 클래스 내에서 static으로 선언되면 해당 변수는 해당 클래스의 모든 객체에 대해 공유 변수가 됩니다.즉, 변수는 어느 객체에나 더 오래 고유합니다.예: -
#include<iostream.h>
#include<conio.h>
class test
{
void fun()
{
static int a=0;
a++;
cout<<"Value of a = "<<a<<"\n";
}
};
void main()
{
clrscr();
test obj1;
test obj2;
test obj3;
obj1.fun();
obj2.fun();
obj3.fun();
getch();
}
이 프로그램은 다음 출력을 생성합니다. -
Value of a = 1
Value of a = 2
Value of a = 3
글로벌하게 선언된 스태틱 변수도 마찬가지입니다.위의 코드는 변수를 외부 함수 void fun()으로 선언한 경우에도 동일한 출력을 생성합니다.
static 키워드를 삭제하고를 비스타틱로컬/글로벌 변수로 선언한 경우 출력은 다음과 같습니다.
Value of a = 1
Value of a = 1
Value of a = 1
차이점은 스태틱 변수가 그 변수라는 것입니다.이 변수에서는 함수의 콜 간에 값을 유지할 수 있습니다.단, 로컬 변수의 경우 범위는 block/function lifetime까지입니다.
예:
#include <stdio.h>
void func() {
static int x = 0; // x is initialized only once across three calls of func()
printf("%d\n", x); // outputs the value of x
x = x + 1;
}
int main(int argc, char * const argv[]) {
func(); // prints 0
func(); // prints 1
func(); // prints 2
return 0;
}
함수 종료 후 로컬 변수가 메모리에 존재하지 않습니다.
, <고객명>님static
변수는 모든 기능에 관계없이 프로그램 수명 동안 메모리에 할당된 상태로 유지됩니다.
하신 내용에 , ★★★★★★★★★★★★★★★★★★★★★★★★★★★.static
할 수 .class
함수 " " "의 " "에 있습니다.namespace
또는 파일 범위.이치노그것은, 머지않아 발생하는 초기화일 뿐입니다.
언급URL : https://stackoverflow.com/questions/13415321/difference-between-static-auto-global-and-local-variable-in-the-context-of-c-a
'sourcecode' 카테고리의 다른 글
VueJ: 어레이가 아닌 옵서버 객체 (0) | 2022.08.29 |
---|---|
왜 numpy가 Python의 ctype보다 매트릭스 곱셈이 빠를까요? (0) | 2022.08.29 |
가장 작은 int인 -2147483648의 유형이 '롱'인 이유는 무엇입니까? (0) | 2022.08.29 |
GCC -g vs -g3 GDB 플래그:차이점은 무엇입니까? (0) | 2022.08.29 |
동일한 페이지에서 서로 다른 쿼리에 vue-apollo 구성 요소 사용 (0) | 2022.08.29 |