첫 번째, 데이터를 안정적으로 입력받을 수 있다. 버퍼는 운영체제에 따라 크기가 다를 수 있지만 일정 크기의 연속된 저장 공간이다. 따라서 키보드로 데이터를 입력하면 우선 저수조와 같은 역할을 하는 버퍼에 저장됩니다. 프로그램이 다른 일을 하느라 해당 입력을 즉시 받지 못해도 데이터가 사라지지 않아 안정적입니다. 두 번째, 입력장치와 독립적으로 사용할 수 있습니다. scanf 함수는 키보드와 직접 연결되지 않고 정해진 크기와 형태를 가진 버퍼에서 입력을 받습니다. 따라서 입력장치가 바뀌더라도 함수를 수정하지 않고 사용할 수 있습니다. 버퍼와 입력장치를 연결하는 작업은 운영체제가 담당합니다.
c언어
이 때에는 배열의 저장 공간이 할당되지 않으며, 매개변수로 선언된 배열의 이름은 자동으로 포인터 변수오 바뀐다. 형식은 유지한 체 포인터 변수로 변경된다는 의미이다. 컴파일러는 배열명을 자동으로 포인터로 바꾸고 타 함수에서 선언된 배열의 모든 배열 요소를 사용할 수 있도록 포인터 연산을 수행한다. 그리고 타 함수에서 선언된 배열의 크기는 알 수 없으므로 알고 싶다면 따로 반드시 요소의 개수를 인수로 받아야 한다. 정리하면 배열로 매개변수에 선언하면 크기를 생략하든 어떤 수로 적었든 컴파일러가 자동으로 포인터로 변경한다.
1. 주소와 포인터는 상수와 변수 차이와 같다. 1) 포인터는 변수처럼 공간으로도 사용할 수 있지만, 주소는 상수처럼 정해져 있는 값만 사용할 수 있지 공간으로는 사용할 수 없다. 예를 들면 C언어에서 등호(=) 좌측에 공간이 오고, 등호 우측에는 값이 온다. 이때 주소 값 자체는 좌측(L-value)로 올 수 없다. #include int main(void){ int a = 1; int *pa = &a; // 포인터는 변수와 같아서 L-value로 쓰이는 것이 가능하다. &a = 100; // 주소는 상수 값이라 L-value로 쓰이는 것이 불가능하다. return 0; } (위 예시는 보여주기 위함으로 작성한 것이라 실제 컴파일하면 오류를 가져온다) 2) 둘 다 산술 연산자는 사용 가능하다. 2. 포..
1. 프로그램 만들기 1.1 컴파일 과정 3단계 1) 1단계 전처리 사용자가 작성한 소스파일을 처음에 가공하는 과정이다. #include가 전처리 지시자이며 이후에 작성하는 등의 헤더 파일, 즉 라이브러리를 불러올 수 있다. 이로써 외부에 있는 함수를 직접 정의하지 않아도 사용할 수 있다. 전처리 과정은 주로 소스 파일을 컴퓨터에 맞게 편집하는 일이므로 파일의 형태에는 변화가 없습니다. 2) 2단계 컴파일 전처리가 된 소스 파일은 컴파일 과정을 거쳐 기계어로 변환된다. 변환된 것은 개체 파일이라고 하며, CPU가 해석할 수 있는 기계어로 된 명령어들로 이루어져 있지만 바로 실행할 수는 없다. 프로그램은 운영체제에 의해 실행되어서 설치된 운영체제가 인식할 수 있는 형태로 바꿔야 한다. 3) 3단계 링크 이..
변수 값을 출력하기 위해선 꼭 변수 선언과 값 초기화를 해줘야 한다. 선언과 동시에 초기화를 해도 되고, 선언 뒤에 초기화를 해도 되지만 꼭 초기화를 해야한다는 이야기이다. 아래는 변수 이름을 정할 때의 규칙을 소개해드려고 한다. 이 규칙들을 지키지 않으면 컴파일 단계에서 에러가 발생하므로 꼭 주의하길 바란다. 1. 변수 이름은 문자나 숫자 또는 _(밑줄)로 구성할 수 있으나 숫자로 시작할 수는 없다. ex) int _3a; (가능), int 3a; (불가능) 2. 변수 이름은 대/소문자를 구분한다. ex) int a;와 int A;는 서로 다르다. 3. C 언어에서 예약어 키워드는 사용할 수 없다. ex) int float;과 double int;는 불가능하다. 4. 특수 문자는 변수 이름에 들어갈 수..
1. 변수 선언과 동시에 초기화 int a; // 정수형 변수 a 선언 a = 5; // 변수 a 초기화 변수 선언과 초기화를 동시에 할 수 있는데 그것은 아래와 같다. int a = 5; 2. 응용 예시 1) int a; int b; int c; int d; int e; 5개의 변수를 선언하기 위해 위와 같이 했지만, 컴퓨터 프로그래밍 언어는 보통 같은 단어를 반복해서 사용하는 것을 피하려는 경향이 있다. 그러므로 아래와 같이 정리할 수 있다. int a, b, c, d, e; 2) int a = 3; int b, c; => int a = 3, b, c;

1) 변수를 선언할 때 한 가지의 숫자가 아니라 연산을 중간에 포함시킬 수 있다. 2) %d는 1장에서 언급했듯이 서식 지정자이다. 이때 d는 decimal 즉, 10진수의 약자로 %d는 곧 '10진수로 값을 출력하겠다'는 의미입니다. 10진수는 정수이므로 %d에 해당하는 변수는 반드시 정수형 변수여야만 합니다. 3) 서식 지정자 %d가 나오면 꼭 뒤에 콤마가 오고, 변수나 상수가 오게 된다. %d는 정수 자료형 변수이므로 정수 이외에는 올 수 없다. C언어에서 곱셈 연산자는 x가 아니라 *이다.

1) 정수형 변수 선언인 int에 앞서 const를 넣어주면 더이상 변하지 않는, 즉 고정적인 값인 상수를 선언할 수 있게된다. 이는 정수형 변수뿐 아니라 모든 변수 선언에도 적용된다. 변수는 값을 계속 바꿀 수는 있지만 상수는 값이 변하지 않는다. 2) 위 사진대로 디버깅을 하게 되면, 아래 사진처럼 printf 함수에서 가장 가까이서 선언된 YEAR라는 변수의 값인 2004를 출력하게 된다. 3) 하지만 처음 선언한 정수형 변수 앞에 const를 붙이면 이 값은 상수가 되고, 더이상 변할 수 없는 값이 되어버린다. 그래서 이후에 이 값에 다른 값을 선언해도 변하지 않는다. 그래서 오류가 나온 것을 아래에 가져왔다. 4) 그래서 만약 같은 변수에 동시에 변수를 선언했다면, 위처럼 상수로 선언되지 않은 ..