C 구조체 메모리 - sonkoni/Koni-Wiki GitHub Wiki

구조체와 메모리 활용

구조체 포인터에 특정값 할당
    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;
}
⚠️ **GitHub.com Fallback** ⚠️