구조체의 c malloc 배열

사용자 2286339

지금까지 포인터와 구조체에 대해 조금 다루었지만 런타임에 구조체 배열을 할당하는 방법을 잘 모르겠습니다. 아래를 참조하십시오.

NB "user_size"는 런타임에 초기화됩니다.

typedef struct _COORDS
{
    double x;
    double y;
    double area;
    double circumference;
    int index;
    wchar_t name[16];
} COORDS, *PCOORDS;

PCOORDS pCoords = (PCOORDS)malloc(sizeof(COORDS)* user_size);
// NULL ptr check omitted 

그 후, 난 그냥 액세스 할 수 있습니다 pCoords[0]pCoords[user_size-1]의 int의 일반 배열처럼?

요점 : 컴파일러가 할당 된 메모리에 구조의 레이아웃을 중첩하는 방법을 이해하지 못합니까? 그렇게해야하나요 아니면 너무 많이 생각하고 있나요?

종웨어

컴파일러는 구조를 메모리에 중첩하지 않습니다.

구조의 배열은 한 요소의 인덱스에 전체 크기를 곱하여 액세스합니다. pCoords[3]예를 들어 pCoords + 3*sizeof(COORDS)는 메모리 에서 "at" 입니다.

구조체 멤버는 오프셋 (패딩을 고려하여 이전 요소의 크기로 계산 됨)에 의해 액세스됩니다 . 따라서 멤버 x0컨테이너의 시작에서 오프셋 에 배열 요소 인덱스를 pCoords더한 값에 있습니다 sizeof(COORDS). 하고 y있다 sizeof(x)그 후.

당신이 때문에 말할 A의 크기 (1) 당신이 메모리의 연속 블록을 원하는 컴파일러 user_size회 하나의 크기 COORD, (2) 다음이를 통해 액세스 pCoords[2].y가 수행하는 모든 곱셈, 그리고 추가 한 다음 읽기 해당 메모리 주소의 값 (문자 그대로). 의 유형이 y이므로 double원시 바이트 double 읽고 해석합니다 . 그리고 일반적으로 그것이 옳습니다.

발생할 수있는 유일한 문제는 동일한 메모리 영역에 대한 포인터 가 여러 개있을 때 입니다. 즉, 주소 "에있는"원시 바이트는 다른 유형으로 해석해야 할 수 있습니다 (예를 들어, 하나의 포인터가 an int및 다른 a 를 기대하도록 지시 할 때 double).

유효한 범위가 acutally 0.. user_size - 1라는 조건으로 코드는 괜찮습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

구조체의 c malloc 배열

분류에서Dev

구조체의 배열에 대한 C ++ malloc

분류에서Dev

C의 구조체에서 malloc을 사용한 후 배열의 기본값은 무엇입니까?

분류에서Dev

C의 typedef 구조체의 malloc 크기

분류에서Dev

Malloc 및 memcpy 구조체와 배열

분류에서Dev

인수로 전달 된 구조체의 배열의 malloc

분류에서Dev

Malloc 대 C의 정적 배열

분류에서Dev

C의 구조체 (구조체의 배열에 값 할당)

분류에서Dev

C의 구조체와 배열 문제

분류에서Dev

C의 중첩 배열 구조체

분류에서Dev

구조체의 다차원 배열 C #

분류에서Dev

구조체 (C) 내의 구조체 배열

분류에서Dev

구조체의 C 구조체 배열을 Cython에 매핑

분류에서Dev

C 구조체 / 포인터의 배열을 구조체의 배열로 선언

분류에서Dev

구조체 및 malloc 내부의 동적 배열이 실패합니다.

분류에서Dev

char 배열을 c의 구조체 배열로 변환

분류에서Dev

malloc 배열 크기 조정

분류에서Dev

C #의 구조체 내에 포함 된 구조체의 마샬링 배열

분류에서Dev

malloc을 사용하여 구조체 배열을 malloc하는 방법

분류에서Dev

malloc을 사용하여 동적 구조체 배열 만들기

분류에서Dev

구조체 배열을 malloc하는 방법

분류에서Dev

C의 구조 배열

분류에서Dev

C : Malloc에 의해 생성 된 Realloc 2 차원 배열

분류에서Dev

C ++는 구조체의 구조체 배열 요소에 액세스합니다.

분류에서Dev

malloc을 사용하여 생성 된 다른 구조체 내부의 구조체 배열에 malloc을 사용하는 방법

분류에서Dev

C의 구조체에서 char 배열의 strcpy 문제

분류에서Dev

C의 구조체에 포함 된 구조체 배열에 구조체를 어떻게 할당합니까?

분류에서Dev

구조체 (구조체 배열의 일부) 내부의 배열 요소에 액세스 (C)

분류에서Dev

C / C ++-구조체의 일부인 값 배열로 복사

Related 관련 기사

  1. 1

    구조체의 c malloc 배열

  2. 2

    구조체의 배열에 대한 C ++ malloc

  3. 3

    C의 구조체에서 malloc을 사용한 후 배열의 기본값은 무엇입니까?

  4. 4

    C의 typedef 구조체의 malloc 크기

  5. 5

    Malloc 및 memcpy 구조체와 배열

  6. 6

    인수로 전달 된 구조체의 배열의 malloc

  7. 7

    Malloc 대 C의 정적 배열

  8. 8

    C의 구조체 (구조체의 배열에 값 할당)

  9. 9

    C의 구조체와 배열 문제

  10. 10

    C의 중첩 배열 구조체

  11. 11

    구조체의 다차원 배열 C #

  12. 12

    구조체 (C) 내의 구조체 배열

  13. 13

    구조체의 C 구조체 배열을 Cython에 매핑

  14. 14

    C 구조체 / 포인터의 배열을 구조체의 배열로 선언

  15. 15

    구조체 및 malloc 내부의 동적 배열이 실패합니다.

  16. 16

    char 배열을 c의 구조체 배열로 변환

  17. 17

    malloc 배열 크기 조정

  18. 18

    C #의 구조체 내에 포함 된 구조체의 마샬링 배열

  19. 19

    malloc을 사용하여 구조체 배열을 malloc하는 방법

  20. 20

    malloc을 사용하여 동적 구조체 배열 만들기

  21. 21

    구조체 배열을 malloc하는 방법

  22. 22

    C의 구조 배열

  23. 23

    C : Malloc에 의해 생성 된 Realloc 2 차원 배열

  24. 24

    C ++는 구조체의 구조체 배열 요소에 액세스합니다.

  25. 25

    malloc을 사용하여 생성 된 다른 구조체 내부의 구조체 배열에 malloc을 사용하는 방법

  26. 26

    C의 구조체에서 char 배열의 strcpy 문제

  27. 27

    C의 구조체에 포함 된 구조체 배열에 구조체를 어떻게 할당합니까?

  28. 28

    구조체 (구조체 배열의 일부) 내부의 배열 요소에 액세스 (C)

  29. 29

    C / C ++-구조체의 일부인 값 배열로 복사

뜨겁다태그

보관