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;
}

64, 32비트 컴퓨터

메모리 주소

컴퓨터는 짧고 간결하게 표현하기 위해 메모리 주소를 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 아키텍처 이름일 뿐

시스템 버스

Address

메모리에 어떤 위치에서 값을 쓰거나 읽어올지 알려주는 배선

Data

Cpu, 메모리, I/O 등등에게 데이터가 이동하는 배선

Control

제어 신호를 전달하는 버스로 R/W 등을 쓰는 배선

제어문

condition (조건)

0이면 False로 조건이 맞지 않고 0이 아닌 모든 것이면 True로 조건이 맞는다.
보통 조건 연산자나 변수(Flag)를 이 자리에 써서 0 아니면 1의 값을 넣도록 만든다.

if

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;
}

switch

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

for는 내가 원하는 만큼 반복하는 것으로 옆 괄호에는 (초기화;조건문;변수 증감 or 원하는 연산)이 들어가며 진행 과정은 이러하다.

  1. 초기화(한번만 진행)
  2. 조건문 비교(맞으면 코드 블럭 실행)
  3. 코드 블럭이 끝난후 맨 오른쪽 변수 증감 or 원하는 연산 실행
  4. 그 후 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;
}

while

for문과 다르게 while은 조건문만 괄호에 쓰며 진행 과정은 같다.
그러므로 초기화를 따로 해야 한다.
보통 무한 반복을 하는데 쓰여 진행되는 중간에 문자를 입력 받는 것을 할 수 있다!!

#include <stdio.h>

int main() {
	int i = 0;
	while (i < 5) {
		printf("[%d] : %d\n", i, i + 1);
		++i;
	}
	return 0;
}

번외 _getch()

기본 라이브러리 말고 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;
}
⚠️ **GitHub.com Fallback** ⚠️