구조체 포인터에 특정값 할당
memset(구조체포인터, 설정할값, sizeof(struct 구조체));
구조체 포인터의 메모리 복사
memcpy(목적지포인터, 원본포인터, 복사할크기);
#include <stdio.h>
#include <string.h> /* memset, memcpy */
#include <stdlib.h> /* malloc, free */
struct Point2D {
int x, y;
};
int main(int argc, char *argv[]) {
// 구조체 변수만 이런 초기화가 가능하다. 구조체포인터는 불가능하다.
struct Point2D p1 = {0,};
printf("=> %d %d\n", p1.x, p1.y);
// => 0 0
struct Point2D p2;
memset(&p2, 0, sizeof(struct Point2D));
printf("=> %d %d\n", p2.x, p2.y);
// => 0 0
struct Point2D *p3 = malloc(sizeof(struct Point2D));
memset(p3, 0, sizeof(struct Point2D));
printf("=> %d %d\n", p3->x, p3->y);
// => 0 0
free(p3);
return 0;
}
#include <stdio.h>
#include <string.h> /* memset, memcpy */
#include <stdlib.h> /* malloc, free */
struct Point2D {
int x, y;
};
int main(int argc, char *argv[]) {
struct Point2D p1 = {10, 20};
struct Point2D p2;
// 구조체 복사
memcpy(&p2, &p1, sizeof(struct Point2D)); // 인자가 포인터이므로 &를 통해 주소를 넣어준다.
printf("=> %d %d\n", p2.x, p2.y);
// => 10 20
// 구조체에서 구조체포인터로 복사
struct Point2D *p3 = malloc(sizeof(struct Point2D));
memcpy(p3, &p1, sizeof(struct Point2D));
printf("=> %d %d\n", p3->x, p3->y);
// => 10 20
// 구조체포인터에서 구조체포인터로 복사
struct Point2D *p4 = malloc(sizeof(struct Point2D));
memcpy(p4, p3, sizeof(struct Point2D));
printf("=> %d %d\n", p4->x, p4->y);
// => 10 20
free(p3);
free(p4);
return 0;
}