Programming/C24 C언어 - 포인터와 함수에 대한 이해 배열을 함수의 인자로 전달하는 방식 배열을 함수의 인자로 전달하려 할 때 배열을 통째로 전달하는 것은 불가능하다. 이때 배열의 주소 값을 인자로 전달하고 이를 통해 접근하도록 유도하는 방법이 있다. 배열의 주소 값을 전달하는 방법은 다음과 같다. int arr[3] = {1, 2, 3}; SimpleFunc(arr); 이때 SimpleFunc 함수의 매개변수는 어떻게 선언될까? 우리는 이미 포인터를 공부하면서 이 방법에 대해 공부했다. void SimpleFunc(int *param) {. . .} int형 배열의 주소 값을 전달받을 것이기 때문에 int형 포인터인 매개변수를 선언해주면 된다. 포인터와 배열의 이름은 같은 것이므로 포인터 대신 배열 이름을 이용해 매개변수를 선언할 수도 있다. void S.. Programming/C 2021. 9. 30. C언어 - 포인터와 배열 이전 글에서 포인터에 대해 알아보았다. 이제 포인터와 배열의 관계에 대해 알아볼 것이다. 배열의 이름도 사실 포인터이다. 하지만 그 값을 바꿀 수 없는 "상수 형태의 포인터"이다. 포인터 변수와 배열의 이름을 비교해보면 다음과 같다. 표에서 보이듯 둘 다 이름이 존재하며, 특정 메모리 공간의 주소 값을 지닌다는 공통점이 있지만 포인터 변수는 이름이 의미하듯이 변수이고, 배열의 이름은 가리키는 대상의 변경이 불가능한 상수라는 차이가 있다. 배열은 상수 형태의 포인터이며 "포인터 상수"라고도 부른다. 또한 배열의 이름도 포인터이기 때문에 배열의 이름을 피연산자로 하는 *연산이 가능하다. 배열이름의 포인터 형과 배열이름을 대상으로 하는 *연산 int arr[5]; 이와 같이 배열이 선언돼 있자 하자. 배열의 .. Programming/C 2021. 9. 29. C언어 - 포인터의 이해 포인터 포인터는 주소를 가리킨다. 이름만 포인터이지 int, char와 같이 변수이다. 이를 포인터 변수라 부른다. 변수가 어떤 값을 저장하는 것처럼, 포인터는 변수의 주소 값을 저장한다. "정수 6이 저장된 int형 변수 num을 선언하고 이 변수의 주소 값 저장을 위한 포인터 변수 pnum을 선언한 후, pnum에 변수 num의 값을 저장하자."와 같은 문장이 요구하는 바를 코드로 작성해보자. #include int main() { int num = 6; int *pnum; pnum = # printf("int형 변수 num의 주소: %d\n", &num); printf("포인터 pnum의 값: %d\n", pnum); printf("포인터 punm이 가리키는 값: %d\n", *pnum); .. Programming/C 2021. 9. 27. C언어 - 1차원 배열 배열이란? 단순하게 "둘 이상의 변수를 모아 놓은 것"이다. 배열은 다수의 데이터를 저장하고 처리하는 경우에 유용하게 사용할 수 있다. 배열은 1차원 배열뿐만 아니라 2차원, 3차원 등 다차원 배열이 있다. 우선 1차원 배열에 대해서 알아본 후, 나중에 다차원 배열에 대해 설명하겠다. 1차원 배열 선언 배열을 선언하는 데에는 3가지 요소가 필요하다. int //배열을 이루는 요소의 자료형 arr //배열의 이름 [4] //배열의 길이 즉, 위의 배열이 선언하는 바는 "int형 변수 4개로 이루어진 arr이라는 이름의 배열을 선언해라"이다. 다른 배열을 예시로 더 들어보겠다. double arr[3]; // double형 변수 3개로 이루어진 배열 arr char str[5]; // char형 변수 5개로.. Programming/C 2021. 9. 23. C언어 - 지역변수와 전역변수 변수는 선언되는 위치에 따라서 "전역변수"와 "지역변수"로 나뉜다. 둘의 차이점으로는 다음과 같은 것이 있다. 메모리상에 존재하는 기간 변수에 접근할 수 있는 범위 지역변수 지역변수에서 "지역"이란 중괄호로 인해 생성된 영역을 말한다. 따라서 지역변수란 중괄호 안에 선언된 모든 변수를 말하는 것이다. 지역변수는 "선언된 지역 내에서만 유효하다"는 특성을 가진다. #include int SimpleFuncOne() { int num = 10; num++; printf("SimpleFuncOne num: %d\n", num); return 0; } int SimpleFuncTwo() { int num1 = 20; int num2 = 30; num1++; num2--; printf("num1 & num2: %.. Programming/C 2021. 9. 22. C언어 - 함수(Function) 함수를 만드는 이유 해결해야 할 규모가 크거나 형태가 복잡한 경우 구현에 필요한 기능들을 분석하고, 그 분석 결과를 바탕으로 작은 크기의 함수들로 구현한다. 한마디로 "하나씩 천천히 해나가는 것"이다. 기능들을 나눠놓으면 문제의 발생 및 프로그램의 요구사항 변경으로 인한 소스코드의 변경이 필요할 때, 변경의 범위를 축소 및 제한할 수 있다. 함수에는 전달 인자의 유무와 반환 값의 유무에 따른 네 가지의 형태가 있다. 1. 전달인자가 있고, 반환 값이 있다. 2. 전달인자가 있고, 반환 값이 없다. 3. 전달인자가 없고, 반환 값이 있다. 4. 전달인자가 없고, 반환 값이 없다. 이러한 유형들의 함수들을 정의해 보겠다. 1. 전달인자와 반환 값이 모두 있는 경우 int Add(int n1, int n2) .. Programming/C 2021. 9. 22. C언어 - 흐름의 분기(if, else, continue, break, switch) if문을 이용한 조건적 실행 분기의 가장 기본은 if와 else로 구성이 된 if~else이다. 이 중 if는 독립적으로 사용되어 "조건적 실행"을 가능하게 한다. if(num1 > num2) { printf("num1이 num2보다 크다.\n"); printf("%d > %d\n", num1, num2); } 위 사진처럼 if문은 위에서부터 순서대로 흐름이 진행된다. if문을 통해 선택적인 사칙연산 프로그램을 만들어보자. #include int main() { int select = 0; double num1 = 0, num2 = 0, result = 0; printf("1. 덧셈, 2. 뺄셈, 3. 곱셈, 4. 나눗셈\n"); printf("어떤 연산을 하겠습니까? "); scanf("%d", &se.. Programming/C 2021. 9. 17. C언어 - 반복문(while문, do~while문, for문) "Hello World!"라는 문자열을 10번 출력한다고 하자. 반복문이 없다면 printf 함수 호출문을 열 번 실행시켜야 한다. 이를 간단명료하게 표현할 수 있도록 해주는 것이 반복문이다. 반목문에는 총 3가지의 종류가 있다. while문 do~while문 for문 1. while문 while문은 특정 조건을 주고 그 조건을 만족하는 동안 특정 영역을 계속해서 반복하는 구조이다. #include int main(){ int num = 10; while(num != 0) printf("%d ", num--); return 0; } // 출력: 10 9 8 7 6 5 4 3 2 1 위의 코드를 보면 while문 내에서 num--를 통해 num의 값을 1씩 줄이다 num의 값이 0이 됐을 때 반복문을 벗어.. Programming/C 2021. 9. 15. C언어 - 상수, 자료형 자료형이란? 데이터를 표현하는 기준 -> 변수, 상수 모두 자료형에 근거한다. 위의 사진을 보면 같은 정수 또는 실수 자료형이라도 사용되는 바이트 크기가 클수록 표현할 수 있는 값의 범위가 넓어진다. 자료형의 크기가 헷갈릴 때는 sizeof 연산자를 사용하면 된다. sizeof 연산자 : 메모리 공간에서 소모하는 메모리의 크기를 바이트 단위로 계산해서 반환해주는 연산자로 변수와 상수뿐만 아니라 자료형의 이름도 올 수 있다. #include int main(){ char c = 9; int n = 10; double dn = 1.2; printf("변수 c의 크기 : %d\n", sizeof(c)); printf("변수 n의 크기 : %d\n", sizeof(n)); printf("변수 dn의 크기 : %.. Programming/C 2021. 9. 14. C언어 - 변수(Variable)와 연산자(Operator) 변수 : 값을 저장할 수 있는 메모리 공간에 붙은 이름 또는 메모리 공간 자체 수학에서의 방정식(2x + 4 = y)이 있다고 하자. 여기서 임의의 값을 대입할 수 있는 문자를 변수라고 한다. C언어에서의 변수도 이와 같은 역할을 한다. 따라서 변수를 선언하면, 그 변수명을 통해 값의 저장 및 참조, 저장된 값의 변경이 가능하다. int main(){ int num; // num이라는 이름의 변수를 선언 . . . . } 여기서 num은 변수의 이름이고, int는 num이라는 변수의 저장타입이다. int main(){ int num; num = 10; printf("%d", num); // 출력: 10 return 0; } 위의 코드에선 num변수를 선언한 후 10이라는 값을 저장한다. 따라서 출력을 하.. Programming/C 2021. 9. 13. C언어 - 헤더파일, printf, scanf 헤더파일 선언의 필요성 c언어를 사용하며 프로그래밍을 한다면 prinf, scanf라는 함수를 사용하게 된다. 이러한 표준 함수를 호출하기 위해서는 함수와 관련된 헤더파일을 선언해야 한다. #include 이는 확장자가 .h로 끝나는 헤더파일을 포함하라는 의미의 선언이다. 표준 라이브러리에는 다양한 표준 함수가 존재하여 헤더파일도 다양하게 존재한다. 때문에 필요에 따라 적절한 헤더파일 선언문을 삽입해야 한다. 헤더파일 선언은 main함수를 정의 하기 이전인 소스코드 맨 앞에 와야 한다. printf printf 함수는 문자열 이외의 데이터를 다양한 형태로 출력하는 것이 가능하다. #include int main() { printf("C Programming\n"); // \n은 개행을 의미한다.(줄바꿈).. Programming/C 2021. 9. 12. C언어 - 기본 단위인 함수(Function)의 이해, 기초 C언어를 접하게 되었다면 함수에 대해 많이 듣게 될 것이다. 흔히 C프로그래밍을 함수로 시작해서 함수로 끝난다고 한다. 함수에 대해 구체적으로 들어가기 위해서는 알아야 될 것들이 많으니 다음에 정리하도록 할 것이다. 우선 함수란 무엇인가? 예를 들어 5x + 15 = y라는 함수가 있다고 하자. 이때 x에 3을 대입하면 y값은 30이 된다. 즉 x에 대입한 값을 "입력"이라 하며 얻게 된 y의 값을 "출력"이라 한다. 이와 같이 입력과 출력이 존재하는 것을 함수(Function)이라 한다. 처음에도 말했듯이 C프로그래밍은 함수로 시작해서 함수로 끝난다. 정해진 순서에 따라 진행되는 함수의 호출이 프로그램의 흐름이 되는 것이다. C언어에서 제일 먼저 호출되는 함수는 main이라는 함수이다. int main.. Programming/C 2021. 9. 12. 이전 1 2 다음 728x90