*C언어 변수타입
// 문제 : 변수를 만들고 3.14를 넣은 후 출력해보세요.(가장 메모리를 효율적으로 사용해주세요.)
#include "stdio.h"
int main(void) {
int i = 3.14;
printf("1st 시도 => i : %d\n", i); // 실패 => i 에는 오직 정수만 들어간다.
float f = 3.14;
printf("2nd 시도 => f : %d\n", f); // 실패 => `%d`는 데이터를 `int 로 해석하겠다.`라는 뜻 입니다.
printf("3nd 시도 => f : %f\n", f);
return 0;
}
// 문제 : 변수를 만들고 200을 넣은 후 출력해보세요.(가장 메모리를 효율적으로 사용해주세요.)
#include "stdio.h"
int main(void) {
unsigned char i = 200;
printf("i : %d\n", i);
return 0;
}
// 문제 : 변수를 만들고 21억을 넣은 후 출력해보세요.(가장 메모리를 효율적으로 사용해주세요.)
#include "stdio.h"
int main(void) {
int s = 2100000000;
printf("s : %d\n", s);
return 0;
}
// 문제 : 변수를 만들고 22억을 넣은 후 출력해보세요.(가장 메모리를 효율적으로 사용해주세요.)
#include "stdio.h"
int main(void) {
int s = 2200000000;
printf("1st 시도 => s : %d\n", s); // 실패, %d는 int로 취급된다. int는약 -21억부터 +21억까지 표현가능 하다.
unsigned int k = 2200000000;
printf("2st 시도 => k : %u\n", k);
int q = 2200000000;
printf("3st 시도 => q : %ld\n", q);
return 0;
}
// 문제 : 변수를 만들고 400억을 넣은 후 출력해보세요.(가장 메모리를 효율적으로 사용해주세요.)
#include "stdio.h"
int main(void) {
long s = 40000000000;
printf("s : %ld", s);
return 0;
}
*C언어 변수 크기 확인 ( sizeof(변수명) )
* 변수 크기 확인 (sizeof)
// 문제 : char와 unsigned char의 공간크기를 각각 출력해주세요.
// 힌트 : sizeof(변수) or sizeof(타입)
// 힌트 : sizeof 함수는 해당 매개변수의 공간크기를 반환합니다.
#include <stdio.h>
int main(void) {
printf("char의 크기 : %lu\n", sizeof(char));
printf("unsigned char의 크기 : %lu\n", sizeof(unsigned char));
char c;
unsigned char uc;
printf("c의 크기 : %lu\n", sizeof(c));
printf("uc의 크기 : %lu\n", sizeof(uc));
return 0;
}
*모든 변수 타입의 크기 (바이트)
- 1 byte = 8 bit
// 문제 : C언어에 있는 모든 기본타입변수의 크기를 출력해주세요.
#include <stdio.h>
int main(void) {
// 정수 계열
char c; // 1바이트(돌 8개)
short s; // 2바이트(돌 16개)
int i; // 4바이트(돌 32개)
long l; // 8바이트(돌 64개)
// 실수 계열
float f; // 4바이트(돌 32개)
double d; // 8바이트(돌 64개)
printf("char c변수의 크기 : %lu 바이트\n", sizeof(c));
printf("short s변수의 크기 : %lu 바이트\n", sizeof(s));
printf("int i 변수의 크기 : %lu 바이트\n", sizeof(i));
printf("long l 변수의 크기 : %lu 바이트\n", sizeof(l));
printf("float f 변수의 크기 : %lu 바이트\n", sizeof(f));
printf("double d 변수의 크기 : %lu 바이트\n", sizeof(d));
return 0;
}
*C언어 포인터
// 문제 : 변수 i의 값을 해킹해주세요.
// 조건 : i의 값을 직접 바꾸는 것은 안됩니다.
// 조건 : `i = 50;` 은 안됩니다.
#include <stdio.h>
int main(void) {
int i = 30;
// p는 i의 실제주소값을 가리킨다.
int* p = &i;
// p안에 들어있는 값을 메모리 상의 좌표값으로 인식하고 그 주소대로 찾아간다.(그러면 변수 i가 나온다.)
*p = 50; // `i = 50;` 과 완벽히 같은 의미이다.
printf("i : %d\n", i);
// 출력 => i : 50
return 0;
}
// 문제 : 변수 c의 값을 해킹해주세요.
// 조건 : c의 값을 직접 바꾸는 것은 안됩니다.
// 조건 : `c = 220;` 은 안됩니다.
#include <stdio.h>
int main(void) {
unsigned char c = 200;
unsigned char* p = &c;
*p = 220;
printf("c : %d\n", c);
// 출력 => c : 220
return 0;
}