반응형

C언어 450

52. 함수 개요

소프트웨어를 만들 때 가장 많은 비용이 들어가는 것이 유지 보수 비용이라는 연구 결과가 계속 나오고 있어요. 그리고 점점 유지 보수 비용이 차지하는 비율도 높아지고 있답니다. 프로그램을 제작할 때 유지 보수 비용을 줄이는 여러 가지 방법이 있는데 그 중에 하나가 재사용성을 높이는 것이죠. 여러 프로그램에서 공통으로 사용할 수 있는 것들을 라이브러리로 만들어서 필요할 때 추가하여 사용하는 거예요. 여러 개의 컴포넌트(Component, 부품)로 만들고 필요한 부품을 결합하여 프로그램을 만들어서 재사용성을 높이기도 해요. 그리고 프로그래밍할 때 재사용성을 높이는 기본은 함수를 만들어 사용하는 것이예요. 대부분의 프로그래밍 언어에서는 알고리즘이 같을 때 함수를 만들어 필요할 때 호출하여 사용하는 문법을 제공한..

50. 인덱스 연산자

C언어에서는 포인터와 정수 사이의 더하기 연산 후에 간접 연산을 수행하는 것을 간단하게 인덱스 연산으로 표현할 수 있어요. 인덱스 연산자는 배열 선언에 사용하는 지시 연산자 [ ]와 기호가 같아요. 선언문 이외에서 포인터와 정수가 피연산자인 이항 연산자 [ ]를 인덱스 연산자라 불러요. 인덱스 연산은 상대적 거리에 있는 원소를 접근할 수 있어요. 인덱스는 상대적 거리를 나타내기 때문에 n 번째 원소에 접근하려면 n-1을 사용해야 한답니다. int arr[3]={1,2,3}; int *p = arr; int index = 0; 위와 같이 배열과 포인터, 기본 형식을 선언하였을 때 arr[index]와 p[index]와 같이 사용하면 *(arr+index), *(p+index)와 같은 표현이예요. 인덱스 연..

49. 간접 연산자

피연산자로 포인터를 사용하는 더하기, 빼기 연산은 프로그램 메모리 주소를 계산하거나 상대적 거리를 계산하죠. 하지만 실제 개발자는 프로그램 메모리 주소를 아는 것은 큰 의미가 없어요. 개발자는 특정 프로그램 메모리 주소에 있는 값을 얻어오거나 설정하는 것을 원해요. C언어에서 포인터(배열 이름 포함)가 갖는 메모리 주소에 원하는 값을 설정하거나 얻어오는 방법은 크게 간접 연산자와 인덱스 연산자를 사용하는 방법이 있어요. 간접 연산자는 선언문이 아닌 코드 구문에서 포인터 형식을 피연산자로 오는 단항 연산자예요. 연산 기호는 포인터 변수를 선언할 때 사용한 지시 연산자 *와 같아요. 모양은 같지만 선언문에 있는 것은 선언한 변수가 포인터 형식임을 나타내는 지시 연산자예요. 간접 연산의 결과는 포인터 변수가 ..

48. 포인터와 - 연산

C 언어에서는 같은 원소의 포인터 사이의 - 연산을 제공하죠. 연산 결과는 정수 형식으로 두 포인터 사이의 원소 개수예요. 예를 들어 int 형식 변수 a의 값이 1016이고 int 형식 변수 b의 값이 1000일 때 a-b의 결과는 4랍니다. ◈ 포인터 형식 사이의 - 연산 #include int main() { int *a = (int *)1016; int *b = (int *)1000; printf("a:%d b:%d a-b:%d\n",a,b,a-b); return 0; } ◈ 실행 결과 a:1016 b:1000 a-b:4 ◈ 배열 이름과 포인터 형식 사이의 - 연산 #include int main() { int arr[10]; int *p = arr+4; printf("arr:%d p:%d p-a..

47. 포인터 + 정수

C 언어에서 배열 이름은 관리하는 메모리의 시작 주소를 의미하죠. 프로그램에서 배열 이름은 포인터 상수로 취급해요. 따라서 배열을 효과적으로 사용하려면 포인터 관련 연산자를 잘 사용할 수 있어야 겠죠. C 언어에서 + 연산에는 하나의 포인터 형식과 정수 형식을 피연산자가 오는 것을 허용해요. 이 때 연산 결과는 상대적 거리의 메모리 주소를 의미한답니다. 여기에서 말하는 상대적 거리는 예를 들어 알아볼게요. int 형식 원소의 포인터 변수의 값이 1000일 때 상대적 거리 4는 1000번지에서 int 형식 원소 4개 크기를 더한 주소예요. 즉 int 형식의 메모리 크기가 4바이트이므로 1000번지에서 상대적 거리 4는 1016이예요. 물론 여기서 1016은 정수 형식이 아니고 포인터 형식이랍니다. ◈ 포인..

46. 배열 선언문

C언어에서 배열을 선언할 때 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자를 사용해요. 포인터를 선언할 때는 포인터임을 알려주는 * 지시 연산자를 사용해요. 배열을 선언하려면 컴파일러에게 선언하는 것이 배열임을 알려주는 [ ]지시 연산자 내부에 원소 개수를 지정하세요. 그리고 배열 이름과 지시 연산자, 원소 개수를 제외한 나머지 부분이 원소 형식이예요. 포인터도 변수 이름과 지시 연산자를 제외한 나머지 부분이 원소 형식이죠. int arr[10]; //배열 선언문, 원소 개수:10, 원소 형식: int int *p = arr; //포인터 선언문, 원소 형식: int int arr[10]; 구문은 원소 형식이 int 이고 원소 개수가 10인 배열 arr을 나타내는 선언문이예요. 컴파일러는 ..

45. 배열과 포인터 개요

C언어에서는 같은 형식의 여러 데이터를 효과적으로 사용할 수 있는 배열을 제공하고 있어요. C언어에서 제공하는 기본 형식들은 변수가 관리하는 데이터가 하나여서 변수 이름은 갖고 있는 값을 의미하죠. 하지만 배열은 관리하는 데이터가 여러 개이므로 배열 이름이 특정 값을 대표할 수 없어요. C언어에서는 배열 이름은 관리하는 특정 값이 아닌 배열에 할당한 메모리의 시작 주소를 의미한답니다. 배열의 원소에 접근할 때는 배열 이름과 상대적 거리를 의미하는 인덱스 값을 사용하는 것이 일반적이예요. 예를 들어 3번째 원소를 접근하려면 시작 위치에서 거리 2이므로 인덱스 2를 사용해요. 따라서 상대적 거리를 나타낼 때 첫 번째 원소는 상대적 거리가 0이므로 n번째 원소는 상대적 거리가 n-1임을 잊지 마세요. 또한 C..

44. 정리하기

39. 조건문 (if, else) 40. 선택문 (switch case) 41. 반복문 (while, do while, for) 42. 제어문 연습 - 별출력 43. 매크로 구문 1. 두 개의 정수를 입력받아 작은 값을 출력하는 코드를 작성하시오. 2. 10개의 정수를 입력받아 최소값과 최대값을 출력하는 코드를 작성하시오. 3. 정수를 입력받아 약수를 출력하는 코드를 작성하시오. 4. 1부터 1000 사이에 소수(Prime Number, 1과 자기 자신만 약수인 수)를 출력하는 코드를 작성하시오. 5. 정수를 입력받은 후에 이진수로 출력하는 코드를 작성하시오. 6. 정수를 입력받은 후에 다음과 같이 화면에 출력하는 코드를 작성하시오. [정답] 디딤돌 C언어 44.정리하기(제어문)

43. 매크로 구문

C언어에서는 자주 사용하는 표현을 약속하여 쉽게 표현할 수 있게 매크로 구문을 제공하고 있어요. 매크로 구문은 자주 사용하는 표현을 약속한 후 개발자가 매크로 구문을 사용하여 쉽게 코드를 작성하는 문법이예요. 개발자가 매크로 구문으로 코드를 작성하면 컴파일러가 기계어 코드로 번역하기 전에 약속한 구문으로 바꾸어 줘요. 이러한 과정을 전개라 부르며 컴파일 전에 수행해서 전처리 구문이라고도 불러요. C언어에서는 #include문으로 다른 파일의 내용을 포함시키거나 #define문으로 매크로 구문을 약속하는 것이 대표적이죠. #include #include “파일명” #include 문은 다른 파일에 있는 내용을 포함시키는 매크로 구문이예요. 개발도구를 설치하면서 함께 설치한 파일들이 있는 폴더는 개발도구의 ..

반응형