4주차 강의 정리(이경훈) - aksrud/3kingOfGod GitHub Wiki
- 정수 형 char, short, int, long (각각 1, 2, 4, 4 Byte)
- 실수 형 float, double (각각 4, 8 Byte)
#include <stdio.h>
int main() {
char c = 10;
short s = 10;
int n = 10;
long l = 10;
float f = 10;
double d = 10;
printf("%d , %d\n", sizeof(char), sizeof(c));
printf("%d , %d\n", sizeof(short), sizeof(s));
printf("%d , %d\n", sizeof(int), sizeof(n));
printf("%d , %d\n", sizeof(long), sizeof(l));
printf("%d , %d\n", sizeof(float), sizeof(f));
printf("%d , %d\n", sizeof(double), sizeof(d));
return 0;
}
컴퓨터는 짧고 간결하게 표현하기 위해 메모리 주소를 16진수로 표현하는데.
64비트 컴퓨터는 16진수로 나타내면 나누기 4 이므로 16, 32비트는 8자리로 쓰여진다.
컴퓨터의 메모리 주소는 관리의 편의를 위해서 1Byte 단위로 묶여진다 그래서 메모리 주소가 1증가 했다는 뜻은 실제로는 1Byte를 넘어 갔다는 뜻이다.
&변수+1 으로 쓰면 컴퓨터는 메모리 주소를 1을 증가 시키는 것이 아니라 그 변수의 자료형에 크기에 정도에 따라 증가한다.
ex.)when &변수+1 thus int -> 4, double -> 8
#include <stdio.h>
int main() {
char n = 10;
printf("%p , %d\n", &n, n);
printf("%p , %d\n", &n+1, n+1);
return 0;
}
x86같은 이름은 인텔의 cpu 아키텍처 이름일 뿐
메모리에 어떤 위치에서 값을 쓰거나 읽어올지 알려주는 배선
Cpu, 메모리, I/O 등등에게 데이터가 이동하는 배선
제어 신호를 전달하는 버스로 R/W 등을 쓰는 배선
0이면 False로 조건이 맞지 않고 0이 아닌 모든 것이면 True로 조건이 맞는다.
보통 조건 연산자나 변수(Flag)를 이 자리에 써서 0 아니면 1의 값을 넣도록 만든다.
if옆 괄호에 조건을 쓰고 그 조건이 맞으면 블록을 실행 하는 것으로.
조건을 연속으로 쓰려면 else if를 붙이거나 조건이 맞지 않는 모든 상황을 말해주는 else를 쓸수 있다.
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
if (a < b)
printf("Hello, True\n");
else
printf("Hello, False\n");
return 0;
}
if와는 다르게 가려낼 값이 몇 개 없는 경우에는 (월요일 ~ 금요일 같은 데이터) switch를 쓰는데.
switch 옆 괄호에 넣어진 값으로 case를 여려개 이어 붙여 case 옆 괄호에 있는 값이 일치하면 해당 case의 코드 블럭을 실행한다.
if의 else와 같이 default라는 것이 있는데 이것도 맞지 않는 모든 경우를 말해주는 것으로 case를 다 지나면 이 것의 코드 블럭이 실행 된다.
#include <stdio.h>
int main() {
switch (2) {
case 1:
printf("Hello, %d\n", 1);
break;
case 2:
printf("Hello, %d\n", 2);
break;
case 3:
printf("Hello, %d\n", 3);
break;
default:
printf("Hello, Default\n");
break;
}
return 0;
}
for는 내가 원하는 만큼 반복하는 것으로 옆 괄호에는
(초기화;조건문;변수 증감 or 원하는 연산)이 들어가며 진행 과정은 이러하다.
- 초기화(한번만 진행)
- 조건문 비교(맞으면 코드 블럭 실행)
- 코드 블럭이 끝난후 맨 오른쪽 변수 증감 or 원하는 연산 실행
- 그 후 2번째로 돌아감
이렇게 실행되며 안에 초기화 된 변수를 이용하는 것으로 for문을 진정으로 사용하게 된다.
ex.) 2의 배수, 3의 배수 등등...
#include <stdio.h>
int main() {
for (int i = 1; i <= 10; i = i + 1) {
if (i % 2 == 0)
printf("even : %d\n", i);
if (i % 2 == 1)
printf("odd : %d\n", i);
}
return 0;
}
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i <= 10; i = i + 1) {
sum = sum + i;
}
printf("sum = %d\n", sum);
return 0;
}
for문과 다르게 while은 조건문만 괄호에 쓰며 진행 과정은 같다.
그러므로 초기화를 따로 해야 한다.
보통 무한 반복을 하는데 쓰여 진행되는 중간에 문자를 입력 받는 것을 할 수 있다!!
#include <stdio.h>
int main() {
int i = 0;
while (i < 5) {
printf("[%d] : %d\n", i, i + 1);
++i;
}
return 0;
}
기본 라이브러리 말고 conio.h에 들어가있는 것으로 버퍼 없이 문자열 입력을 받을수 있다.
#include <stdio.h>
#include <conio.h>
int main() {
int run = 1;
while (run) {
printf(" Է ( :q) : \n");
char c = _getch();
if (c == 'q') {
run = 0;
}
else {
printf("Hello : %c\n", c);
}
}
return 0;
}
코드 중복을 없앨 수 있다. (코드 재 활용성 증가)
호출부에서 주는 인자를 받는 변수로 함수 이름 오른쪽 괄호에 쓰이며 2개 이상 쓸때에는 ,를 기준으로 쓴다.
#include <stdio.h>
void sumInteger(int num) {
int sum = 0;
for (int i = 1; i <= num; i = i + 1) {
sum = sum + i;
}
printf("sum = %d\n", sum);
}
int main() {
sumInteger(3);
sumInteger(10);
sumInteger(100);
return 0;
}