[완료] 아큐먼트로 넘겨진 변수의 값 변경이 가능한지요?
글쓴이: neohwang / 작성시간: 월, 2007/04/02 - 2:30오후
아래의 func() 함수의 아규먼트로 넘겨진 변수의 값을 함수내에서 바꾸는 것이 문제가 없는지요?
물론 실행해 보면 문제 없이 결과가 나오는 데요.. 혹시 문제를 일으킬 소지가 있는지 궁금합니다.
#include <stdio.h> void func(int a); int main(int argc, char *argv[]) { func(10); return 0; } void func(int a) { printf("%d\n",a); a=5; printf("%d\n",a); }
Forums:
변수 범위에 관한
변수 범위에 관한 문제는 단순하면서도 중요한 문제라 게시판에서 답변을 구하기 보단 C 입문서를 구해 읽거나 주위 아는 이에게 제대로 설명을 듣는 것이 neohwang님에게 도움이 될 듯합니다.
책 보실 때 global variable, local variable, automatic variable, static, extern 등의 개념에 주의하시면 됩니다.
참고로 C 함수는 항상 call by value입니다.
답변 감사드리며...
조언해주신 사항에 대해서는 시간이 허락될 때.. 기본서를 보도록 하겠습니다.
지금 닥친 문제는 지금 당장 결정해야 할 시급한 문제라,
급히 도움을 청하오니..
혹시 위 사항에 대한 답변을 우선 주실 수 없는지요?
main에서 func를 호출할
main에서 func를 호출할 때 매개변수로 넘긴 10 의 값이 저장되는 곳은 func이 사용하는 영역이라고 생각하면 됩니다.
이 func가 사용하는 변수영역(func의 stack frame)은 func 함수가 종료하면서 파기되기 때문에 func 함수 안에서 어떻에 사용하더라도 상관이 없습니다..
감사드립니다.
좋은 하루 되세요..
문법적으로 전혀 문제 없는 문장입니다.
우선 함수의 매개변수가 가지는 범위는 함수범위입니다.
다시 말하자면 a가 유효할수 있는 범위는 변수 a 가 선언된곳(즉 매개변수로 선언된곳) 부터
함수가 끝나는 곳까지입니다.
함수가 호출 되면 변수 a가 선언되게 되고, 그 함수 내에서 a 라는 변수를 사용할수 있게 됩니다.
물론 a 라는 변수의 내용을 바꿀수도 있겠지요. 하지만 함수를 벗어나게 되면 그 변수는 사용할 수 없게 됩니다.
작성하신 코드는 변수를 auto 로 지정하셨습니다.(이건 생략이 가능하기에 그런 것입니다.)
그럴 경우 대상체 a변수는 함수가 시작할 시 자동으로 공긴이 할당 된 후, 함수 호출이 끝나게 되면.
자동으로 할당된 공간이 파기되게 됩니다.
함수 정의에서 매개변수에 static 을 사용할 수 있는지는 아직 공부를 많이 하지 못해 모르겠으나,
함수 혹은 블럭 내부에서 static 을 사용하게 된다면, 그 변수는 프로그램 시작시에 공간이 할당되게 됩니다.
따라서 한번의 함수 호출에서 변수를 변경 시킨 후, 다시 한번 함수를 호출하게 된다면.
첫번째 함수 호출때 변수에 저장한 값이 두번째 함수에서 사용되게 됩니다.
물론 이때에도, 변수의 scope 에 따라서 함수 바깥에서는 해당 변수를 인식할 수 없습니다.
감사합니다.
자세한 설명 짐심으로 감사드립니다.
좋은 하루 되세요..
참고로 적자면, 함수
참고로 적자면, 함수 정의에서 매개변수에 지정할 수 있는 storage-class specifier는 register 뿐입니다.
댓글 달기