2017-09-14 1 views
1

나는구조체 생성자를 사용하여 구조체 내부의 포인터 배열을 초기화하는 방법은 무엇입니까?

struct TreeNode { 
    bool exist; 
    bool word_ending; 
    TreeNode* branches[3]; 
    TreeNode(): exist(true), word_ending(false) { 
     memset(branches, NULL, sizeof(branches)); 
    } 
}; 

같은 memset을 시도했지만 경고

warning: implicit conversion of NULL constant to 'int' [-Wnull-conversion] 
     memset(branches, NULL, sizeof(branches)); 
     ~~~~~~   ^~~~ 
         0 
1 warning generated. 

NULL 포인터의 배열을 초기화하는 다른 방법이 있나요

이 나타 납니까?

+0

'TreeNode * branches [3] = {};'선언문에. – nwp

+0

NULL이 0과 같지 않습니까? –

+1

소스에서 NULL을 0으로 변경하면 컴파일이 잘됩니다. NathanOliver가 제안한 것을 해보십시오. –

답변

4

memset을 사용하는 대신 구성원 초기화 목록에서 배열을 초기화 할 수 있습니다. 사용하는 경우

TreeNode(): exist{true}, word_ending{false}, braches{} {} 

braches은 0으로 초기화됩니다. 이는 초기화 목록의 각 누락 된 초기화 프로그램이 해당 요소를 초기화되도록하기 때문에 효과적입니다.

+0

감사! 하지만 nullptr로 분기를 초기화하는 방법은 무엇입니까? 0과 동일하지 않습니다. – danche

+0

@danche 0은 널 포인터입니다. 'nullptr'은 포인터 타입으로 캐스트 된 0입니다. – NathanOliver

+0

그래서 우리는'branches {nullptr, nullptr, nullptr}'을 필요로하지 않습니까? – danche

관련 문제