전역변수와 지역변수 무엇이 차이인가요?

저는 C언어에 관심이 많습니다...

전역변수와 지역변수 무엇이 차이인가요?..

대충은 알겠는데 좀 더 자세히 설명부타드리며.. 관련 링크가 있으면 같이 부탇그리겠습니다...

...

    10개의 답변이 있어요!

    • 안녕하세요 질문자님.

      전역변수와 지역변수의 차이가 궁금하신것 같습니다.

      대부분의 프로그래밍 언어에서 지역변수 / 전역변수의 차이는 아래와 같습니다.

      전역 변수 : 해당 프로그램의 Main 에서 모두 공통적으로 호출이 가능한 "전지역 공통으로 변수명과 값을 공유하는 변수"

      지역 변수 : 해당 지역 변수가 "선언된 Scope(범위,영역) 에서만 변수명과 그 값을 공유하는 변수"

    • C언어에서 전역변수와 지역변수의 차이는 다음과 같습니다.

      전역변수란 ?

      말 그대로 번역 하면 Global Variable 으로 하나의 파일 내에서 변수로 적용되는 변수 입니다.

      지역변수란 ?

      말그대로 Local Variable 으로 어떤 함수 내에서만 적용되는 변수입니다. 해당 함수를 벗어나서는 효과가 없습니다.

      여기에 동반되는 점이 있습니다. 변수명을 어떻게 사용하느냐 입니다.

      전역변수명과 지역변수명을 동일하게 짓는다면, 프로그램을 디버깅할 때 정말 힘듭니다. 이해가 되지 않거든요.

      따라서 기본적으로 변수명에는 의미를 부여해 변수명을 짓는 것이 바람직합니다.

      그러면 지역변수는 어떤 함수 내에서만 적용된다고 말씀 드렸습니다.

      func1() {

      item = 10

      }

      func2() {

      item = 20

      }

      이렇게 함수를 사용하였다면, 해당 함수 내에서 func1 의 item은 10을 나타내며, 이 func1 함수가 종료되면 item=10은 없어집니다.

      이는 C언어 동작 상 Heap 메모리에 올렸다가 함수가 종료되면 메모리에서 반환 되기 때문에 날라가며, 다시 func2 함수가 호출되면 item=20 을 나타나게 됩니다. 어차피 함수는 한번 호출 되고 종료되면 메모리에서 날아가기 때문에 변수도 그때그때 생성되었다가 없어진다고 생각하시면 됩니다.

      그러나 전역변수는 프로그램이 처음 실행되고, 종료될때까지 계속적으로 사용이 가능하게 됩니다. 이것이 전역변수와 지역변수의

      가장 큰 차이점 입니다.

    • 안녕하세요

      여기를 참고하세요

      http://tcpschool.com/c/c_function_variableScope

      간단히 설명드리면,

      전역변수는 main이나 함수안이 아닌 include 및에 부분과 같이 외부에 선언되는 것을 의미하고, 프로그램이 동작하는 동안 계속해서 존재하는 변수입니다.

      반대로 지역변수는 블록안에 선언되고 그 블록안에서만 의미를 가지는 변수입니다.

    • 안녕하세요.

      전역변수 지역변수의 차이는 정말 간단합니다.

      쉽게 설명을 해보자면 영어로 전역변수는 Global variable, 지역 변수는 Local variable 입니다.

      Global 변수는 뜻과 같이 한번 선언하면 프로그램 어디서든 사용할 수 있는 변수라고 생각하시면 됩니다.

      반면 Local 변수는 선언 된 곳에서만 사용 할 수 있는 것으로 함수 안에 선언되면 그 함수 안에서만

      메모리가 존재하는 것으로 함수에서 output 될 때는 사라진다고 생각하시면 됩니다

      C언어를 공부하시다가 함수를 만들어 보시면 그때 명확하게 이해가 되실 것이라 생각합니다.

      감사합니다.

    • 특정 함수나 클래스 안에서 정의되어 사용하는 것이 지역변수 이구요, 프로그램 전체에서 사용할수있게 설정된 변수를 전력변수라 합니다.

      프로그램을 짜다보면 함수나 클래스마다 변수명이 곂치는 경우가 종종있습니다. 혼자 개발한다면 어느정도 이런부분을 감안하며 짤수있겠으나 여러 개발자가 클래스나 함수 단위로 개발하는경우에는 변수명이 곂칠수 있죠.

      그렇기 때문에 지역번수를 사용하여 서로 다른 클래스에 동일 변수 명이있어도 영향을 피해가도록 설정해줍니다.

    • 안녕하세요 질문자님.

      우선 전역변수와 지역변수의 차이는 단어에서도 느끼셧겠지만

      전역변수는 소스코드 전체에서 사용할수있는 global변수라 생각하시면됩니다.

      예를들어 내가 a=1 이라고 전역변수를 설정해두었다면 어디서 a를 호출하더라도 a의 값은 1이되는것이죠

      지역변수는 그 함수내에서만 사용하는 변수입니다. 함수내에 a=1이라 지정하였을경우

      다른 함수에서 a를 호출을 해도 선언조차하지않았다는 에러메세지가 나오게 될것입니다.

      이런식으로 이해하시면 좋지않을까하여 댓글달아봅니다.

      열공하세요 ^^

    • #include <stdio.h> int a = 5; /* 전역 변수 */ int main(void) { printf("a : %d\n", a); int a = 3; printf("a : %d\n", a); { int a = 1; printf("a : %d\n", a); } return 0; }

      위의 코드를 실행하면 모두 a를 출력했음에도 결과가 5, 3, 1이 출력됩니다.

      첫 번째 a 출력은 main { } 에 a가 정의되어있지 않습니다.

      따라서 전역변수(어디에서든 불러 올 수 있는 변수)를 출력했습니다.

      두 번째 a 출력은 main { int a} 가 선언 된 후, 출력을 하였습니다.

      즉 지역 변수는 괄호 블럭 { }에서만 유효합니다.

      세 번째 a 출력은 1이 됩니다.

      새로운 괄호 블럭 { }에서 a를 재 선언했기 때문에 유효한 a가 1이 됩니다.

      int a = 1을 지우면 a는 3을 출력하게 됩니다.

      지역변수는 { } 밖을 빠져나가면 더이상 유효하지 않은 것이지 새로운(내부의) { }에서는 여전히 유효하기 때문입니다.

      즉, 지역 변수는 가장 먼저 선언된 변수를 찾게되고, 그렇지 않으면 전역변수를 찾습니다.

    • 안녕하세요.

      전역변수는 함수 외부에 선언한 변수이고 지역변수는 함수 내부에 선언한 변수입니다.

      이에 따라 지역변수는 선언한 함수 안에서만 사용 가능하고 전역변수는 모든 함수에서 사용 가능합니다.

      그리고, 변수를 사용 가능한 범위를 변수의 scope라고 하는데, 지역변수라도 함수 안의 block 내에서 선언하면 해당 block 안에서만 사용할 수 있습니다.

      만약 같은 이름의 전역변수와 지역변수가 있다면 지역변수가 우선하지만 그런 상황은 만들지 않는 것이 좋습니다.

      C 언어의 포인터와 변수 함수의 파라미터, 리턴값 등을 공부할 때 memory 구조를 알고 있으면 이해하기 쉬우니 같이 공부하시기 바랍니다.

      C 관련해서는 아래 사이트에 정리가 잘 되어 있네요.

      http://tcpschool.com/c/c_function_variableScope

    • 지역변수는 함수가 생성됨과 동시에 생성되서 함수가 끝나면서 파기되는 소멸성 변변입니다.

      (반복문, 조건문 등의 내부)

      전역변수는 프로그램이 종료되기 전까지 소멸되지않는  변수입니다.

      전역변수는 어디에서든 접근이 가능하며 값도 변경 할수 있습니다.

      전역변수를 많이 사용하면 값이 어디서 바뀌는지 헷갈릴수 있습니다.

      전역변수는 최소한으로 줄여야 한다는 주장이 많지만 필요에 따라 효율성을 위해 꼭 필요하기도 합니다.

      특히 static 정적변수의 활용도가 많습니다.

    • 안녕하세요. A-HA 프로그래밍 전문가입니다.

      먼저 지역 변수는 해당 함수 안에서 정의되어 함수 안에서만 사용되는 변수를 의미합니다. 함수 밖으로 나가면 더이상 사용이 불가능하죠.

      전역 변수는 클래스 내부에서 정의되어 해당 클래스 안에서 사용이 가능한 변수를 의미합니다. 만약 여러 작업을 거치며 사용이 되는 변수라면 전역 변수로 정의하고 사용하셔도 됩니다.