programming language/C 언어 (41) 썸네일형 리스트형 지역변수 와 전역변수 전역 변수는 어디서든 접근이 가능한 변수로써 지역변수와 달리 중괄호 내에 선언되지 않는다. 제일 위에 #include 전역 변수는 48행과 같이 선언된 변수를 말한다. 전역 변수의 특징은 1.프로그램의 시작과 동시에 메모리 공간에 할당되어 종료 시까지 존재한다. 2. 별도의 초기 값으로 초기화하지 않으면 0으로 초기화된다. 3. 프로그램 전체 영역 어디서든 접근이 가능하다. 전역 변수와 동일한 이름의 지역변수가 선언되면? 실행결과는 동일한 이름의 지역변수는 해당 영역 내에서 동일한 이름의 전역 변수를 가린다. >>결론은 이런 상황 자체를 만들지 않는 것이 중요하다. 가급적 변수의 이름은 달리하자. 지역변수와 전역변수 지역변수와 전역 변수는 각각 1. 메모리상에 존재하는 기간 2. 변수에 접근할 수 있는 범위에서 차이점을 보인다. 지역변수에서 말하는 '지역'이란 중괄호에 의해 형성되는 영역을 뜻한다. 그러므로 중괄호 내에서 선언되는 변수는 모두 지역변수이다. 그런데 이 지역변수는 선언된 지역 내에서만 유효하다는 특성이 있다. 그리고 지역 변수는 선언된 지역 내에서만 유효하기 때문에 선언된 지역이 다르면 이름이 같아도 문제가 되지 않는다. 지역변수는 해당 선언문이 실행될떄 메모리 공간에 할당되었다가, 선언문이 존재하는 함수가 반환을 하면(종료를 하면) 메모리 공간에서 소멸된다. 다음은 지역변수에 관한 예제이다. 40행의 지역변수 num에 의해서 36행의 main함수의 지역변수 num이 if문내에서 가려졌다. 때문에 41.. 오늘 공부한 c언어 함수(4) 세 개의 정수를 인자로 전달받아, 그중 가장 큰 수를 반환하는 함수와 가장 작은 수를 반환하는 함수를 정의해 보는 문제이다. 그리고 이 함수들을 호출하는 적절한 main함수도 작성해야 한다. 처음 잘못된 방법의 풀이이다. 두 번째로 작성한 코드인데 24행 25행을 보면 각 함수에 대한 인자를 입력 받을 수 없는 상황이기 때문에 출력 값이 매우 이상하게 작성이 되었다.( Maxmum함수를 호출을 하였는데 이 함수에 입력을 할 인자가 없다.) 바르게 작성한 코드이다. if else문과 조건연산자가 잘 기억이 나지 않아 복습을 시행하였다. 조건 연산자 (조건식) ? data1 : data2 ; 조건이 참이면 연산의 결과로 data1이 반환, 그렇지 않으면 num2가 반환. 오늘 공부한 c언어 함수(3) main 함수를 포함한 모든 함수는 조건 및 상황에 관계없이 다른 함수를 호출할 수있다. 오늘 공부한 c언어 함수(2) int Increment (int n); 같은 문장 표현은 컴파일러에게 Increment함수가 뒤에서 나온다고 알려주는 문장이다. 즉 해석을 해보면, 뒤에 반환형이 int이고 int형 정수 하나를 인자로 받는(입력값을 받는) Increment 함수의 호출문을 만나면 컴파일 해줘! 뒤에서 나와! 추가적으로 int Increment (int n);는 int Increment (int);로 표현이 될수 있는데 함수의 선언에는 매개변수의 갯수 및 자료형 정보만 포함이 되면 된다. 그래서 매개변수의 이름을 생략해서 선언하는것이 가능하다. int Add( int num1, int num2); 의 선언은 int Add( int , int ); 다음과 같은 매개 변수의 이름을 생략한 표현으로 선언할 수있다. 오늘 공부한 c언어 함수 11행에서 Add 함수를 호출했다. 그러면! Add 함수의 영역으로 실행의 흐름이 이동한다. 물론, 호출된 함수가 반환을 하면 잠시 멈췄던 main 함수의 실행 흐름은 다시 이어진다. 반환형이 void로 선언된 함수는 return문을 사용할 수 없을까? 아니다. 반환형이 void인 함수에서도 return문을 사용할 수 있다. ex) void NoreturnType(int num) { if(num c언어 switch문. case 레이블은 뒤에 세미콜론이 아닌 콜론( : )을 붙인다. default레이블은 if else if else의 마지막 else와 유사하다. 즉 일치하는 case레이블이 없을 경우에 실행되는 영역을 표시할 때 사용된다.(불 필요시 생략이 가능하다.) 만약 break문이 없다면? 예를 들어 switch(2) 라 한다면 case 2:로 이동해 case 2만이 아닌 그 이하 case 3 case4 ...를 모두 default영역에 있는 문장들도 모두 실행이 돼버린다. break문이 필요한 이유는 실행 영역을 묶기 위함이라 한다. 두 번째 문제 풀이. 7행에서 문장 경고가 발생했는데 현재로써는 왜 인지 모르겠다. 앞으로 공부하며 차츰 알아가 봐야겠다. c언어의 연산자 문제를 푸는 데에 있어서 연산자 사용에 관해 부족함이 있어 개념을 정리해보았다. 두 개의 피연산자를 요구하는 연산자를 가리켜 '이항 연산자'라고 한다. 대입 연산자와 산술 연사자는 모두 이항 연산자이다. ex) num = 11; 연산자 = 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입. num = 11 + 3; 두 피연산자의 값을 더한다. - * /(왼쪽의 피연산자 값을 오른쪽 피연산자 값으로 나눈다.) %(나머지를 반환) 복합 대입 연산자 += a = a +b와 a += b는 같다. -= a = a - b 와 a -= b는 같다 *= a = a * b 와 a *= b는 같다 /= a = a / b 와 a /= b는 같다. %= a = a % b와 a %= b는 같다 그리고 ==, ^=, |= 의 .. 이전 1 2 3 4 5 6 다음