59.9 심사문제: 포인터 연산으로 메모리 주소 조작하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
short *numPtrA;
short *numPtrB;
short *numPtrC;
scanf("%p", &numPtrA); // F0000000 입력
numPtrB = numPtrA + 3; // 포인터가 short 자료형이므로 2바이트씩 3번 순방향으로 이동
numPtrC = numPtrA + 5; // 5번 순방향으로 이동
printf("%X\n", numPtrB); // F0000006
printf("%X\n", numPtrC); // F000000A
return 0;
}
59.10 심사문제: 포인터 연산과 역참조 사용하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int numArr1[3] = { 0, };
long long numArr2[3] = { 0, };
int *numPtr = malloc(sizeof(int) * 3);
void *ptr = malloc(sizeof(long long) * 3);
int num1;
long long num2;
scanf("%d %d %d %lld %lld %lld",
&numArr1[0], &numArr1[1], &numArr1[2],
&numArr2[0], &numArr2[1], &numArr2[2]
); // 1, 2, 3, 4, 5, 6 입력
memcpy(numPtr, numArr1, sizeof(int) * 3); // numPtr에 배열 복사
memcpy(ptr, numArr2, sizeof(long long) * 3); // ptr에 배열 복사
numArr1[0] = numArr1[1] = numArr1[2] = 0;
numArr2[0] = numArr2[1] = numArr2[2] = 0;
num1 = *(numPtr + 2); // 배열의 세번째 값을 가져오기 위해 +2 하고 역참조한다
num2 = *((long long*)ptr + 1); // ptr는 void 포인터이기 때문에 long long 자료형으로 형변환한다
printf("%d %lld\n", num1, num2);
free(ptr);
free(numPtr);
return 0;
}
59.11 심사문제: 구조체 포인터로 포인터 연산하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Point3D {
float x;
float y;
float z;
};
int main()
{
void *ptr = malloc(sizeof(struct Point3D) * 3);
struct Point3D p[3];
float result1, result2;
scanf("%f %f %f %f %f %f %f %f %f",
&p[0].x, &p[0].y, &p[0].z,
&p[1].x, &p[1].y, &p[1].z,
&p[2].x, &p[2].y, &p[2].z
);
memcpy(ptr, p, sizeof(struct Point3D) * 3);
memset(p, 0, sizeof(struct Point3D) * 3);
result1 = ((struct Point3D *)ptr + 1)->x; // 구조체 포인터로 변환 후 포인터 연산을 통해 값에 접근
result2 = ((struct Point3D *)ptr + 2)->z;
printf("%.1f %.1f\n", result1, result2);
free(ptr);
return 0;
}
'C_study' 카테고리의 다른 글
[C] 코딩도장 61 : 함수에서 반환값 사용하기 (0) | 2021.08.05 |
---|---|
[C] 코딩도장 60 : 함수 사용하기 (0) | 2021.08.03 |
[C] 코딩도장 58 : 자료형 변환하기 (0) | 2021.07.31 |
[C] 코딩도장 57 : 열거형 사용하기 (0) | 2021.07.30 |
[C] 코딩도장 56 : 구조체 비트 필드 사용하기 (0) | 2021.07.29 |