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

누구나 97

프로토 타입과 함수 본문이 포함 된 "functions.c"및 "functions.h"파일 2 개가 포함 된 예제 자습서가 있습니다.
예제에는 구조체 배열에 대한 구조체 / 포인터 배열 선언과 함수 호출을 포함하는 메인이 없습니다.

functions.c :

#include "functions.h"

const char *getTeamA(const sTest *p)
{
    return p->teamA;
}

void setTeamA(sTest *p, char *s)
{
    strcpy(p->teamA, s);
}

int getNum(const sTest *p)
{
    return p->num;
}

void setNum(sTest *p, int i)
{
    p->num = i;
}

functions.h :

#ifndef FUNCTIONS_H_
#define FUNCTIONS_H_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_CHAR 20
#define SIZE 5

typedef struct {
    char teamA[MAX_CHAR];
    int num;
    // ...
} sTest;


const char *getTeamA(const sTest *p);
void setTeamA(sTest *p, char *s);

int getNum(const sTest *p);
void setNum(sTest *p, int i);

#endif /* FUNCTIONS_H_ */

그래서 내 질문은
위에 작성된 코드에 따라 구조체를 어떻게 선언 할 수 있습니까? 예를 들면 다음과 같습니다.

int main()
{
    sTest data[SIZE];       //size isn't important
    sTest *dataPtr = data;

    setTeamA(dataPtr[0].teamA, "name1");

    // ...

    printf("%d", getNum(dataPtr[1].num)); // just an example. i know that it isn't initialized

    // ...

    return 0;
}

이것이 올바른 방법입니까? 아니면 변수를 선언하고 함수에 전달하는 더 좋은 방법이 있습니까?
중요한 것은 functions.c 및 functions.h로 작성된 코드를 고수해야한다는 것입니다. 따라서 함수가 구조체 데이터를 직접 수정할 수 없으므로 포인터를 사용해야합니다 (함수에 멤버 선택 연산자 "->"가 있기 때문). .씨).

0x534f53

필요하지 않습니다 dataPtr. data[i]데이터를 sTests 의 배열로 선언했기 때문에를 수행하여 똑같은 작업을 수행 할 수 있으므로 배열의 data첫 번째 요소를 가리 킵니다.

을 (를) 호출 할 때 무엇을하는지 분해 해 보겠습니다 setTeamA(dataPtr[0].teamA, "name1"). 데이터 배열의 첫 번째 sTest 구조체가 "name1"을 teamA 필드로 갖도록 설정하려고합니다. 의 프로토 타입은 setTeamA()실제로 sTest *p. 귀하의 예에서는 teamA필드를 통과하고 있습니다. 그래서 당신이 정말로 부르고 싶은 것은 setTeamA(&dataPtr[0], "name1"). 이것은 dataPtr [0]의 데이터를 가리키는 포인터로 변환됩니다.

이것이 작동하는 동안 앞서 말했듯이 dataPtr은 필요하지 않습니다. 따라서 이것은 다음과 같습니다 setTeamA(&data[0], "name1").

또한 주목할 가치가 있습니다. setTeamA(data, "name1")데이터는 이미 배열의 첫 번째 요소에 대한 포인터이기 때문에 간단히 작성할 수 있습니다 .

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C는 구조체 내부의 구조체에 대한 배열을 선언합니다.

분류에서Dev

C의 구조체 내부에서 구조체에 대한 포인터 배열을 선언 할 수 없습니다.

분류에서Dev

다른 구조체에서 앞으로 선언 된 구조체의 배열

분류에서Dev

C에서 앞으로 선언 된 구조의 배열에 대한 포인터

분류에서Dev

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

분류에서Dev

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

분류에서Dev

c의 구조체에서 2 차원 배열의 선언 및 채우기

분류에서Dev

c의 구조체에 배열 (포인터 아님) 전달

분류에서Dev

구조체 내의 동적 배열에 대한 포인터 C

분류에서Dev

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

분류에서Dev

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

분류에서Dev

C의 구조체와 배열 문제

분류에서Dev

C의 중첩 배열 구조체

분류에서Dev

구조체의 c malloc 배열

분류에서Dev

구조체의 c malloc 배열

분류에서Dev

구조체의 다차원 배열 C #

분류에서Dev

C ++ 포인터에서 배열의 대상 구조체를 포함하여 구조체에 대한 값 읽기

분류에서Dev

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

분류에서Dev

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

분류에서Dev

C에서 구조체의 멤버 인 배열에 대한 포인터 산술

분류에서Dev

포인터 C로 구조체에 배열 연결

분류에서Dev

구조체에 포인터 배열을 할당하는 C ++

분류에서Dev

구조체의 동적 배열을 선언 할 수 없습니다.

분류에서Dev

C의 구조체에 대한 포인터 배열에서 정보 얻기

분류에서Dev

C의 구조체 내에서 포인터가 가리키는 자유 배열

분류에서Dev

함수에 전달 된 구조체의 배열에 대한 C 포인터

분류에서Dev

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

분류에서Dev

.h에서 선언 된 구조체의 배열 채우기, .c의 함수 내부

분류에서Dev

구조체 배열 포인터를 인수로 사용하는 함수, C 언어

Related 관련 기사

  1. 1

    C는 구조체 내부의 구조체에 대한 배열을 선언합니다.

  2. 2

    C의 구조체 내부에서 구조체에 대한 포인터 배열을 선언 할 수 없습니다.

  3. 3

    다른 구조체에서 앞으로 선언 된 구조체의 배열

  4. 4

    C에서 앞으로 선언 된 구조의 배열에 대한 포인터

  5. 5

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

  6. 6

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

  7. 7

    c의 구조체에서 2 차원 배열의 선언 및 채우기

  8. 8

    c의 구조체에 배열 (포인터 아님) 전달

  9. 9

    구조체 내의 동적 배열에 대한 포인터 C

  10. 10

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

  11. 11

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

  12. 12

    C의 구조체와 배열 문제

  13. 13

    C의 중첩 배열 구조체

  14. 14

    구조체의 c malloc 배열

  15. 15

    구조체의 c malloc 배열

  16. 16

    구조체의 다차원 배열 C #

  17. 17

    C ++ 포인터에서 배열의 대상 구조체를 포함하여 구조체에 대한 값 읽기

  18. 18

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

  19. 19

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

  20. 20

    C에서 구조체의 멤버 인 배열에 대한 포인터 산술

  21. 21

    포인터 C로 구조체에 배열 연결

  22. 22

    구조체에 포인터 배열을 할당하는 C ++

  23. 23

    구조체의 동적 배열을 선언 할 수 없습니다.

  24. 24

    C의 구조체에 대한 포인터 배열에서 정보 얻기

  25. 25

    C의 구조체 내에서 포인터가 가리키는 자유 배열

  26. 26

    함수에 전달 된 구조체의 배열에 대한 C 포인터

  27. 27

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

  28. 28

    .h에서 선언 된 구조체의 배열 채우기, .c의 함수 내부

  29. 29

    구조체 배열 포인터를 인수로 사용하는 함수, C 언어

뜨겁다태그

보관