본문 바로가기

Code.D IT 강좌/C언어

[C언어 강좌] 포인터 변수/ Call by Value vs Call by Reference C언어 강좌 포인터 변수 포인터 C언어에서 가장 어렵고도 중요한 개념입니다.우리는 지금까지 '주소'의 존재를 간과하고 주로 데이터값을 중점적으로 프로그래밍 해왔습니다.그러나 컴퓨터의 관점에서 변수를 참조할 때, 주소를 먼저 참조한 뒤 데이터값을 참조하죠.우리는 택배 내용물만 관심이 있었지 택배를 보낼 주소에는 관심이 없었습니다.포인터 변수는 그 '주소'를 저장해줍니다.여기서 주소란 데이터의 저장 위치를 나타내며 &(엠퍼센트)로 표현합니다. 포인터를 사용해야 하는 이유 포인터는 데이터에 직접 접근하는 것이 아니라 간접적으로 접근합니다.(포인터 이외에도 함수 호출, 재귀함수 등등에서도 간접적으로 접근)데이터에 접근하기 전에 주소에 먼저 접근한 뒤 데이터를 꺼내옵니다.따라서 직접적인 사고방식보다 간접적인 사고.. 더보기
[C언어 강좌] 배열(1차원 배열, 2차원 배열, 3차원 배열) C언어 배열(1차원 배열, 2차원 배열, 3차원 배열) 배열 배열이란 같은 자료형을 가진 연속된 메모리 공간으로 이루어진 자료구조입니다. 나란히 나열한 변수 여러 개를 하나로 묶어 놓은 것이 배열입니다. 배열의 시작은 0부터 시작합니다. 배열은 반복문과 함께 사용 가능합니다. 배열 선언 후 초기화해주지 않으면 쓰레기 값이 출력됩니다. 1차원 배열의 선언 형식 자료형 배열명 [배열 크기 = 배열 길이]; int array [10]; Ex) int num0; int num1; int num2; . . . int num9; 위처럼 변수 여러 개(num0 ~ num9)를 하나로 묶어 주면, int num[10]; 처럼 코드 한 줄로 나타낼 수 있습니다. 코드를 간결하게 표현할 수 있기에 배열을 사용합니다. 배열.. 더보기
[C언어 강좌] 함수(function) C언어 강좌 함수(function) 특정 작업을 하는 일련의 코드를 하나의 이름(함수의 이름)으로 묶어 놓은 코드의 집합을 말합니다.함수는 입력 값을 받아서 처리한 후 하나의 결과값을 반환하는 역할을 합니다.함수를 사용하는 이유는 무엇일까요?한번 함수를 정의하면 언제든지 여러 번, 호출해서 실행할 수 있으므로 반복 작업에 많이 쓰입니다. 예를 들어보겠습니다. 과일을 짜서 음료수 즙을 만드는 코드를 작성한다고 상상합시다.함수를 사용하지 않는다면 일반적으로 아래와 같이 나타냅니다. 사과를 따는 코드 1;딴 사과를 짜서 즙으로 만드는 코드 1-1;오렌지를 따는 코드 2;딴 오렌지를 짜서 즙으로 만드는 코드 2-1;포도를 따는 코드 3;딴 포도를 짜서 즙으로 만드는 코드 3-1; 위와 같은 복잡한 코드를 함수를.. 더보기
fflush 함수, fflush(stdin)/fflush(stdout) 개념 제대로! C언어 강좌 fflush 함수, fflush(stdin)/fflush(stdout) 관련 글[C언어 강좌] scanf 함수/fflsuh 함수 위의 글에서 fflush함수를 대략적으로만 다뤘었죠.오늘은 개념을 조금 더 파고들어서, fflush(stdin)와 fflush(stdout)을 비교하여 다루려고 합니다.우선 시스템과 입·출력 장치와의 관계를 살펴보겠습니다. 표준 입력 함수를 사용할 경우 입력 버퍼를,표준 출력 함수를 사용할 경우 출력 버퍼를 제공받게 됩니다.한 번에 바로 입력받고 출력하면 되지 왜 굳이 임시로 데이터를 저장하는 버퍼를 만들까요?그 이유는 문자 하나하나를 입력받아서 바로바로 처리하는 것보다 버퍼에 데이터를 저장하여 쌓아둔 후 처리하면 일의 효율이 훨씬 높기 때문이죠! ※ 참고표준 출력.. 더보기
[C언어 강좌] 제어문 - 반복문(while문, for문, do~while문) C언어 강좌 제어문 제어문의 간단한 분류에 대해 알아보실 분은 아래의 링크를 확인해주세요![C언어 강좌] 제어문 - 조건문(if문, switch문) 반복문 코드상에서 동일한 문장을 여러 번 반복해서 출력해야 하는 경우라든가 1~100까지의 수를 1씩 증가하게 만들어야 하는 등의 반복작업을 해야 하는 경우가 있습니다. 이럴 때는 printf함수 100번을 사용하여 코드를 짜야 할까요? 이는 굉장히 비효율적이며 코드의 가독성이 상당히 떨어집니다. 그래서 나타난 것이 반복문입니다. 반복문의 종류에는 while문, for문, do~while문이 있습니다. while문 '~하는 동안'의 의미입니다.조건 값이 true인지 false인지 확인한 후, 조건식이 참인 동안 '수행 구문'을 반복해서 실행합니다.반복문 사용.. 더보기
[C언어 강좌] 제어문 - 조건문(if문, switch문) 관련 글[C언어 강좌] 제어문 - 반복문(while문, for문, do~while문) C언어 강좌 제어문 제어문은 다음과 같이 분류합니다. 오늘은 제어문 중 조건문에 해당하는 if문, switch문을 알아보겠습니다. 조건문(분기문, 비교문) 프로그래머가 코드상에서 특정 조건을 부여했을 때 그 조건에 만족하면 해당 문장을 출력해주는 문법입니다.조건문은 크게 if문과 switch문이 있습니다. if문, if~else문 한 번에 하나의 조건을 판단합니다. if문 형식 if(조건식){수행 구문(조건식이 참인 경우 수행);}else{수행 구문(조건식이 거짓인 경우 수행);} 수행할 구문이 각각 한 문장이면 중괄호({}) 생략이 가능합니다.if(조건식)수행 구문1;else수행 구문2; 수행할 구문이 2 문장 이상이.. 더보기
[C언어 강좌] 증감 연산자/관계 연산자/논리 연산자 C언어 강좌 증감 연산자 피연산자의 값을 증가(+1)시키고 감소(-1)시키는 연산자입니다. ++(증가 연산자), --(감소 연산자)의 기호를 이용하여 수치 데이터 형식에 사용합니다. ++: +1, --: -1을 뜻하는데, 이는 코드를 간결하게 하고 프로그래밍 속도를 향상시킬 수 있지만, 오히려 코드를 해석할 때 가독성을 저해할 수 있으므로 가독성을 해치지 않는 선에서 사용해야 합니다. 피연산자의 위치(++a, a++)에 따라 결과 값이 다르게 나올 수 있기 때문에 주의하여 사용해야 합니다. ++a → 선 증가, 후 연산(먼저 증가시키고 연산을 합니다.) a++ → 선 연산, 후 증가(먼저 연산하고 증가시킵니다.) --(뺄셈)도 마찬가지입니다. 증감 연산자를 사용해보도록 하겠습니다. #include int.. 더보기
[C언어 강좌] 산술 연산자/복합 대입 연산자 C언어 강좌 산술 연산자 수치형식의 데이터를 다루는 연산자입니다. +(덧셈), -(뺄셈), *(곱셈), /(나눗셈), %(나머지)가 산술 연산자입니다. Ex) 5 + 7 =12 산술 연산자는 위의 예처럼 두 개의 피연산자(5, 7)이 필요한 이항 연사자입니다. 여러분들이 이미 알고 계시듯이 산술 연산자에는 *(곱셈)과 /(나눗셈)이 +(덧셈), -(뺄셈)보다 먼저 실행됩니다. 산술 연산자를 사용해보겠습니다. #include int main(void){ int a, b; a = 2; b = 7; printf("덧셈 연산 결과: %d \n", a+b); printf("뺄셈 연산 결과: %d \n", a-b); printf("곱셈 연산 결과: %d \n", a*b); printf("나눗셈 연산 결과: %d \.. 더보기
[C언어 강좌] scanf 함수/fflush 함수 C언어 강좌 scanf 함수 데이터를 입력받는 기능을 가진 함수입니다.printf()는 데이터를 출력하는 함수지만, scanf()는 데이터를 입력받는 함수인 셈이죠. scanf 함수의 기본 구조 scanf("서식 문자" &변수);Ex) scanf("%d", &a); fflush 함수 C언어로 프로그래밍을 하다 보면 입출력 버퍼에 데이터가 남게 되어 정상적인 입출력을 하지 못하는 경우가 생깁니다. 이런 문제는 보통 scanf 함수를 사용하면서 데이터를 입력받는 경우에 발생합니다. 이를 해결하기 위해서는 데이터가 남아있는 버퍼를 비워줘야 합니다. 이때 많이 사용하는 함수가 fflush 함수입니다. 참고로 fflush 함수가 버퍼를 비운다는 뜻은 버퍼에 남아있는 데이터를 완전히 지운다는 뜻이 아닙니다.버퍼에 .. 더보기
[C언어 강좌] 자동 형 변환/강제 형 변환 관련 글[C언어 강좌] 자료형(정수/실수)의 종류와 크기(sizeof 함수) C언어 강좌 자료형끼리는 형 변환이 가능합니다.즉, int형을 double형으로 바꾸고, char형을 int형 등으로 바꿀 수 있다는 소리죠!형 변환에는 두 가지 종류가 존재합니다.1. 자동 형 변환2. 강제 형 변환 자동 형 변환(암시적 형 변환) 데이터 형식(Type)을 자동으로 변환해주는 것을 의미하며,대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형 변환됩니다.메모리 크기가 작은 자료형에서 큰 자료형으로 변환되는 것을 우선순위로 둡니다. 크기를 한눈에 비교하면 다음과 같습니다.char 더보기