58.10 심사문제 : 소수점 이하 버리기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
float num1;
int num2;
scanf("%f", &num1);
num2 = (int)num1; // num1은 실수형이므로 정수형으로 형변환하여 num2에 저장한다.
printf("%d\n", num2);
return 0;
}
58.11 심사문제 : 포인터 변환하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long long *numPtr1 = malloc(sizeof(unsigned long long));
unsigned int *numPtr2;
scanf("%llx", numPtr1);
numPtr2 = (unsigned int *)numPtr1; /* numPtr1 은 부호없는 8바이트 정수형이므로 낮은 자릿수
4바이트를 출력하기 위해서는 4바이트 정수형 포인터로 변환해주어야 한다.*/
printf("0x%x\n", *numPtr2);
free(numPtr1);
return 0;
}
58.12 심사문제 : void 포인터 변환하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
long double *numPtr1 = malloc(sizeof(long double));
void *ptr;
scanf("%Lf", numPtr1);
ptr = numPtr1; // ptr에 numPtr1의 주소를 넣어준다
printf("%Lf\n", *(long double *)ptr); /* ptr은 void형이므로 long double형 포인터로 변환하고
이를 역참조하면 numPtr1의 메모리에 저장된 값이 출력된다*/
free(numPtr1);
return 0;
}
58.13 심사문제 : 구조체 포인터 변환하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Stats {
float health;
float healthRegen;
unsigned int mana;
float manaRegen;
float range;
float attackDamage;
float armor;
float attackSpeed;
float magicResist;
unsigned int movementSpeed;
};
int main()
{
void *ptr = malloc(sizeof(struct Stats));
struct Stats st;
scanf("%u %u", &st.mana, &st.movementSpeed);
memcpy(ptr, &st, sizeof(struct Stats)); // ptr에 st의 멤버 값을 복사해준다
st.mana = 0;
st.movementSpeed = 0;
printf("%u\n", ((struct Stats*)ptr)->mana); // 구조체 포인터로 변환해준 후, 멤버 mana에 접근한다
printf("%u\n", ((struct Stats*)ptr)->movementSpeed);
free(ptr);
return 0;
}
'C_study' 카테고리의 다른 글
[C] 코딩도장 60 : 함수 사용하기 (0) | 2021.08.03 |
---|---|
[C] 코딩도장 59 : 포인터 연산 사용하기 (0) | 2021.08.02 |
[C] 코딩도장 57 : 열거형 사용하기 (0) | 2021.07.30 |
[C] 코딩도장 56 : 구조체 비트 필드 사용하기 (0) | 2021.07.29 |
[C] 코딩도장 54-55 : 구조체와 공용체 사용하기 (0) | 2021.07.28 |