>source

c++는 참조로 통과 할 수 있지만 C에서는 아닙니다.

질문은 C가 포인터가 전달 된 구조체의 배열에 대한 참조를 업데이트하는 데 어떻게 사용되는 기능을 사용할 수 있습니까?

내 질문은 code로 더 잘 설명 될 수 있습니다.

enum ch_numbers {
        CH_00,
        CH_01,
        CH_02,
        CH_03,
        CH_04,
        CH_05,
    };
    enum sen_numbers {
        SEN_0,
        SEN_1,
        SEN_2,
        SEN_3,
        SEN_4,
    };
    struct ch_sen_map {
        enum ch_numbers ch_num;
        enum sen_numbers sen_num;
    };
    struct ch_sen_map map1[]= {
        {CH_02, SEN_3},
        {CH_03, SEN_1},
        {CH_01, SEN_4},
    };
    struct ch_sen_map map2[]= {
        {CH_01, SEN_1},
        {CH_02, SEN_3},
        {CH_04, SEN_2},
    };
    void UpdateMap(struct ch_sen_map * map)
    {
        map= map1;
    }
    struct ch_sen_map * GetMap(void)
    {
        return map1;
    }
    void main()
    {
        int i;
        struct ch_sen_map *pMap;
        int mapsize= sizeof(map1)/sizeof(struct ch_sen_map);
        printf("\n Expected map1 (straight forward):");
        for (i=0; i<mapsize; i++) {
            printf("\n %d : %d", map1[i].ch_num, map1[i].sen_num);
        }
        pMap= map2;
        printf("\n Expected map2 :");
        for (i=0; i<mapsize; i++) {
            printf("\n %d : %d", pMap[i].ch_num, pMap[i].sen_num);
        }
        UpdateMap(pMap);  //Not working as I expect
        printf("\n Expected map1 :");
        for (i=0; i<mapsize; i++) {
            printf("\n %d : %d", pMap[i].ch_num, pMap[i].sen_num);
        }
        pMap= GetMap();
        printf("\n Expected map1 :");
        for (i=0; i<mapsize; i++) {
            printf("\n %d : %d", pMap[i].ch_num, pMap[i].sen_num);
        }
    }

및 출력은 다음과 같습니다.

Expected map1 (straight forward):
 2 : 3
 3 : 1
 1 : 4
 Expected map2 :
 1 : 1
 2 : 3
 4 : 2
 Expected map1 :  < --this is what I want to fix.
 1 : 1   <--These are map2 values, Not Map1 :(
 2 : 3
 4 : 2
 Expected map1 :
 2 : 3
 3 : 1
 1 : 4

i 기본적으로 return을 제외하고는 GetMap과 같이 작동하도록 UpdateMap 함수를 다시 작성 /수정하고 싶습니다. [나는 여전히 의미가 없을지도 모른다].

호출자 함수가 MAP 포인터 * PMAP (이 경우 메인)를 정의하고 싶습니다. 이 맵 포인터를 함수 (UpdateMap)에 전달하면 UpdateMap 함수가 포인터 값을 맵핑하거나 MAP1 또는 MAP2를 가리 킵니다. 그리고 더 중요한 것은 메인 함수가 맵 포인터를 사용하는 경우 맵 포인터를 갱신하면 updateMap 함수가 갱신 된 맵을 가리키는지도 포인터 참조를 업데이트합니다.

위의 code에서 UpdateMap은 * PMAP를 함수 매개 변수로 가져오고 해당 값을 해당 함수 내에서만 사용할 수 있습니다.

  • 이전 mysql : Ubuntu에 Workbench 설치
  • 다음 MMU 및 PTE.