본문 바로가기
C Language study

C언어의 기본적인 부분

by 나영수 2023. 12. 4.


1. 먼저 printf라는 함수를 사용할 때 항상 서식문자를 사용해야지 오류가 나지 않는다.
ex ) int a = 1; printf(a)  X
       int a = 1; printf("%d", a) O

2. 변수의 값을 변경하는 경우 변수의 type을 다시 선언하면 안된다. 변수를 초기화할 때는 타입과 변수명 모두 필요하지만 값의 변경이 있을때에는 변수만 사용한다.

ex ) int a = 1; int a = 2;  X
       int a = 1; a = 2       O

3. C언어에서는 타입 변수를 잘 알아야하는데 float과 double같은경우 scanf("%lf", &ft);   scanf("%f", &ft); 에서 차이가 있다. 전자의 경우는 long float이기 때문에 double 타입의 변수에 대응되고 float의 경우는 float 타입과 대응되게 된다.(작은 범위)

4. C언어에서는 space(공백)도 \n에 포함된다. 따라서 두줄에 걸쳐 입력을 받는 경우에는 공백을 끼고 입력받는 것과 똑같이 생각하면 된다.

5. scanf(), printf() 같은 함수는 모두 system call이 아니라 C library에 내장되어있는 stdio.h에 있는 함수들이다.
system call은 read, write, exec(), fork()의 함수들이 해당된다.


6. 연산 출력시 실수를 얻고 싶으면 int 형의 type을 double형으로 형변환해야 출력이 가능하다.

7. math.h라는 라이브러리를 import하게 되면 pow함수를 사용할 수 있는데 해당 함수의 parameter는 모두 double 타입의 값을 사용해야한다. -> 아니면 값이 이상하게 나오는 경우 발생

8. C언어의 runtime error의 주요 이유는 arr를 선언할 때 동적으로 크기를 할당하지 않고 입력받은 값을 사용해 정적으로 배열을 선언하는 경우이다. 배열의 크기를 선언할 때 상수 또는 상수 표현식을 사용해야하기 때문에 컴파일러가 배열의 크기를 컴파일 시간에 알 수 없다. 이를 해결하기 위해 배열을 동적으로 할당하거나 배열을 선언하기 전에 num을 입력받은 후 배열을 선언해야한다.

9. C언어는 왜 번거롭게 변수의 타입을 적어줘야하는 걸까? 그 답은 default로 규칙을 이렇게 정해놓게 되면 포인터를 사용해서 메모리의 주소를 접근할 때 몇 바이트 만큼 읽어야할지 지정할 수 있기 때문이다. 만약 *a = &num이라고 한다면 a에 num의 주소값을 넣어주고(32비트 컴퓨터라면 4바이트, 64비트 컴퓨터라면 8바이트) 그 후 num으로 가서 값을 읽어야하는데 어디까지 값을 읽을지 알 수 없다. 왜냐하면 변수의 타입이 short, double, int라는 것을 명시하지 않았기 때문이다.

10. 또한 C언어의 주소는 음수가 나올 수 없기 때문에 unsigned int 형식으로 지정해줘야지 오류가 나지 않는다.

 

 

 

Continue....

'C Language study' 카테고리의 다른 글

포인터(pointer)(2)  (1) 2023.12.06
포인터(pointer)(1)  (1) 2023.12.01