2016-08-06 2 views
0

는 C에서 뭔가를 할 수 있나요 ++와 같은 :이 C에서 배열 함수의 배열을 설정 ++

uint8_t[] getSth() { 
    uint8_t a[2] = {5, 2}; 
    return a; 
} 

uint8_t b[] = getSth(); 
+5

사용하십시오'표준 : 대신 array'? – Ryan

+0

@ Ryan 신입 회원. 어떻게 사용할 수 있습니까? –

+0

아니요,'return a '는 정의되지 않은 동작을 일으키고,'uint8_t b [] = getSth()'는 컴파일되지 않습니다. –

답변

3

아니, 그런 : 포인터에 내장 된 배열 붕괴 반환에, 당신은 끝날 것 때문에 여러 오류 및 매달린 포인터. 수익 유형으로 b의 크기는 컴파일 타임에 알려진 경우

  1. 사용 std::array<uint8_t,2>을하고 b의 유형으로 :

    C++하지만, 몇 가지 솔루션을 제공합니다. b의 크기는 컴파일 타임에 알 수없는 경우

  2. (예 getSth는 다른 라이브러리에) b의 크기는 컴파일 타임에 알려진 경우 std::vector<uint8_t>
  3. 를 사용하여, 당신은 당신이 라이브러리 함수에 제한됩니다 사용이 허용되면 배열을 struct 또는 클래스로 래핑 할 수 있습니다. 이것은 가장 간접적 인 방법이므로, 대신 1 또는 2를 선호합니다.


std::array<uint8_t,2> getSth() { 
    std::array<uint8_t,2> a = {5, 2}; 
    return a; 
} 

std::array<uint8_t,2> b = getSth(); 

Demo.