본문 바로가기

언어/C

(3)
[C언어] 포인터란? 포인터는 C에서 여타 가장 헷갈리고 어려운 개념이다. 허나 정작 개념 자체만 놓고 보았을 때는 매우 단순하다. 단지 store할 수 있는 것이 일반 정수, 실수, 문자를 넘어서 주소가 되었을 뿐이다. 그래서 제대로 포인터에 대해 정리해 보고자 이 글을 쓴다. 포인터(pointer)는 다른 변수, 혹은 그 변수의 메모리 공간 주소를 가리키는 변수를 말한다. 말 자체(pointer)에서도 알 수 있듯이 무언가를 가리키고 있다(point)는 의미를 담고 있다. 그 가리킴을 당하는 대상이 변수가 되는 것이고 그 변수에는 값이 저장되어 있으므로 그 값을 간접적으로 접근할 수 있는 것이다. 포인터도 엄연히 변수이다(상수 포인터도 존재하다만), 대신 담기는 대상이 일반 값이 아니라 특정 변수의 주소가 담기게 되는 것..
[C언어] What is scanf()? INDEX 1. 함수 원형 2. 주소 연산자(&) 3. 형식 지정자 4. 위험성 printf 함수와 함께 가장 많이 접한 함수 중 하나일 것이다. 사용자로부터 값을 입력받을 수 있는 꽤나 유용한 함수이기 때문에 gets(), fgets()와 더불어 PS를 할 때 가장 많이 사용되는 함수임은 과언이 아니다. 입력받는 데이터의 구분은 줄 바꿈, 탭, 띄어쓰기가 있다. 하지만 scanf는 정확히 어떤 원리로 동작할까? 1. 함수 원형 #include int scanf(const char* restrict format, ...); 원형과 인자의 원리(고정 인수, 가변 인자)는 printf와 크게 다르지 않다. 데이터를 입력받기 위해서는 일단 데이터 타입에 해당하는 크기의 메모리는 먼저 할당받아야 하기 때문에 형..
[C언어] What is printf()? INDEX 1. printf의 f 2. 왜 int형으로 선언되었을까? 3. (const char* restrict format,...)의 의미는? 4. 가변 인자란? int printf(const char* restrict format, ...) printf()는 함수이다. C언어를 접한 초창기 때부터 항상 사용했던 것이라 함수라는 의심을 아예 하지 못하였다. 하지만 지금 와서 다시 생각해 보면 그냥 헤더 파일에서 지원해 주는 것들은 전부 다 함수이다. 인자를 통해 특정 목적을 수행해 주는 함수, 즉 printf() 또한 같은 원리로 동작한다. 하지만 구체적으로 어떻게? 먼저 printf()함수란 뭐인지 알아보자. "사용자가 프로그램과 대화하기 위해 사용하는 함수(입출력, I/O)에서 Output 역할을..