본문 바로가기

분류 전체보기

(17)
따배씨(따라 배우는 C언어_홍정모) Chapter9 CHAPTER 9 함수 9.12 포인터의 작동 원리 포인터 변수에 저장되는 값은 다른 변수의 주소이다. 직접적으로 데이터를 저장하기 보다는 다른 메모리 공간이나 그 공간에 저장되어 있는 데이터(또는 객체 object)를 간접적으로 가리키는(point) 역할을 한다. int* a_ptr = &a; 처럼 *(asterisk) 를 이용해 주소를 저장하는 변수를 만들어 이용. 이 변수는 x86 에서는 4바이트, x64 에서는 8바이트다. 9.15 NULL 포인터와 런타임 에러 어떤 포인터에 어떤 주소를 넣을지 말지를 런타임에 결정하는 경우, 조건에 따라 포인터에 아무런 주소도 초기화 하지 못하면 문제가 생길 수 있다. 그래서 C 에서는 NULL, C++ 에서는 nullptr 이라는 null 값을 포인터를 생성할..
따배씨(따라 배우는 C언어_홍정모) Chapter8 CHAPTER 8 문자 입출력과 입력 유효성 검증 8.1 입출력 버퍼 효율적인 작업을 위해 한꺼번에 입력을 받거나 출력하는 데 쓰이는 것. 운영체제가 관리한다. 이론대로라면 getchar() 과 putchar() 을 while 문과 함께 쓸 때, 어떤 글자를 입력받자마자 putchar 이 실행되어 바로바로 처리가 되어야 한다. 하지만 실제로 해보면 abc 순서대로 입력받으면 aabbcc 가 아닌 abcabc 가 콘솔에 표시된다. 즉 입력받자마자 어떤 처리를 하는 게 아니라 입력받을 걸 순서대로 버퍼로 옮겨놨다가 입력이 끝난 후 버퍼 안에 담긴 내용을 한꺼번에 처리한다. 버퍼를 사용하지 않는 입출력 콘솔을 경험하고 싶다면 #include 하고 getchar() 대신 _getch()나 _getche() 로 ..
따배씨(따라 배우는 C언어_홍정모) Chapter7 CHAPTER 7 분기 "가장 위대한 선생님이다, 실패란 것은." __마스터 요다 7.2 표준 입출력 함수들 getchar(), putchar() 예제 printf(), scanf() 와 달리 한 글자씩 입력 받고 출력하는 함수. (하지만 진짜 한글자 한글자 처리하는 것만은 아니기 때문에 곧 배울 버퍼의 개념을 이해할 필요가 있다.) while 문을 이용해서 문자열을 받아오는 게 가능하다. 이 때, while 문 내부에서 특정 글자를 다른 글자로 바꾼다거나 하는 다양한 작업이 가능하다. 특히 char 이 int 로 변환되어 사용된다는 점을 활용해 아스키 코드를 잘 활용한다면 효과적인 프로그래밍이 가능하다. 굳이 아스키 코드를 모두 외울 필요가 없다는 점을 알아두자! char 형이 결국 아스키 코드기 때문..
따배씨(따라 배우는 C언어_홍정모) Chapter6 CHAPTER 6 반복문 "성공의 두 가지 요구조건은, 첫째는 올바른 때에 올바른 장소에 있는 것이고 둘째는 성공과 관련된 일을 하는 것이다." __Ray Kroc 6.1 while 반복 루프에서 scanf() 의 반환값 사용하기 scanf() 는 받아오기로 지정한 형식지정자와 형식이 맞지 않는 입력값을 받으면 에러를 발생시킨다. 그래서 반환값을 사용하지 않으면 잘못 입력한 순간 프로그램 전체가 먹통이 된다. 따라서 반환값을 받아 제대로 입력받지 못하면 0 이라는 점을 이용해야 프로그램 전체가 망가지는 것을 막을 수 있다. 앞서 배웠듯이 scanf() 의 반환값은 입력받은 변수의 개수이다. ::: tip 알아두자 cin.ignore() // 버퍼 버리기, cin.clear() // 에러 삭제 를 이용하는..
따배씨(따라 배우는 C언어_홍정모) Chapter5 CHAPTER 5 연산자, 표현식, 문장 5.1 반복 루프와의 첫 만남 옛날에는 goto 문을 써서 반복문을 구현하기도 했지만 요즘은 안 쓴다. 5.2 대입 연산자와 몇 가지 용어들 Data object (object) L-value (object locator value) : 메모리를 가지고 있는 특정 데이터 객체(개체) R-value (value of an expression) : 수정 가능한 L-value에 대입될 수는 있지만 자기 자신은 L-value가 될 수 없는 것. 프로그램이 계산하는 임시값으로 계산이 끝나면 사라지는 값들 포함. 어떤 statement 에서 일시적인 값(value)으로만 쓰이면 R-value, 메모리 주소를 가지고 object 의 역할을 하는 것을 L-value 라고 한다...
따배씨(따라 배우는 C언어_홍정모) Chapter4 CHAPTER 4 문자열과 형식 맞춘 입출력 "우리의 모든 꿈들은 이뤄질 수 있다. 우리에게 끝까지 밀어붙일 용기가 있다면." __월트 디즈니 4.1 문자열 입출력하기 scanf() 사용주의할 점 scanf() 를 통해 일반 변수에 입력값을 넣을 때와, 배열에 입력값을 넣을 때는 & 의 사용 여부에 차이가 있다. 배열은 그 자체가 첫번째 주소를 가리키고 있기 때문에 & 를 붙이지 않는다. (붙여도 상관은 없다.) 문자열이면 %s 를 쓴다. char fruit_name; scanf("%c", &fruit_name); char fruit_name[40]; scanf("%s", fruit_name); 4.2 sizeof() 연산자 sizeof(int), sizeof(a) 같이 주로 사용하기 때문에 함수라고 생..
따배씨(따라 배우는 C언어_홍정모) Chapter3 CHAPTER 3 데이터와 C언어 "우리는 과거를 알지만 제어할 수는 없다. 우리는 미래를 제어할 수는 있지만 알 수는 없다." _Claude Shannon 3.1 데이터와 자료형 Data and Data Types 3.2 변수와 상수 자료형 변수 리터럴 상수 int angel 1004; 앞에 한정자, 제한자(Qualifier)를 덧붙여 쓸 수 있으며, 변수를 기호적 상수(Symbolic constant) 라고 하기도 한다. 한정자, 제한자 자료형 기호적 상수 리터럴 상수 const int angel 1004; 3.3 scanf() 콘솔로 부터 사용자의 입력을 받아 변수에 저장할 때 사용한다. scanf() 를 통해 받아온 값을 &(ampersand) 를 붙인 변수에 저장한다. int i = 0; sca..
따배씨(따라 배우는 C언어_홍정모) Chapter2 CHAPTER 2 C언어 소개 "달을 향해 쏴라. 맞추지 못하더라도 별들 사이에 머물게 될 것이다." _ Norman Vincent Peale 2.5 변수 선언 변수 '정의'(definition) 라고 불리는 특별한 선언(declaration) 선언된 변수 내에 값 할당(assignment) ::: tip '초기화'란? 선언과 동시에 대입연산자(=)를 통해 값을 할당하는 것 ::: 2.6 printf() *print formatted* 문자열 출력시 줄바꿈을 하고 싶은 경우 \n (escape sequence) 을 사용한다. printf() 함수 안에 하드코딩된 문자열 외 숫자나 변수를 넣어 출력하고 싶다면 %i(integer), %d(decimal) 등을 활용한다. `pri..