어레이 함수로부터 반환 될 수있다.
배열의 첫 번째 요소에 대한 포인터를 반환 할 수 있습니다. 귀하의 경우, 배열의 첫 번째 요소는 자체적으로 배열 (행렬에있는 행)입니다. 배열에 대한 포인터를 반환하는 함수에 대한 포인터를 선언하는 데 필요한 구문은 너무 직접적으로 사용하기에 이상합니다. 상황을 다루는 가장 간단하고 사용하기 쉬운 방법은 typedef를 사용하는 것입니다.
typedef struct my_struct row[4]; // a 4-element row in a matrix
typedef row* (*func)(void); // pointer-to-function returning pointer-to-row
당신 은의 크기를 생략 할 수없고 는 당신은 지역 배열에 대한 포인터를 반환하는 것은 아니라는 것을 알아야합니다 즉, 배열 대신
typedef struct my_struct row[];
typedef row* (*func)(void); // doesn't do what you want
typedef struct my_struct *row;
typedef row* (*func)(void); // doesn't do what you want
을 포인터를 사용할 수 없습니다 허용치 :
row* myfunc(void)
{
struct my_struct my_matrix[4][4];
return my_matrix; // will compile, but the behaviour is undefined
// a good compiler will warn you
}
poin 이러한 방식으로 정적 객체 또는 동적으로 할당 된 객체에 적용 할 수 있습니다.
포인터가 아닌 객체를 반환하려면 래퍼 구조체를 사용해야합니다.
typedef struct { struct my_struct elements[4][4]; } wrapper;
wrapper (*foo)(void); //OK
wrapper myfunc(void)
{
wrapper w;
return w; // OK
}
컴파일 오류 란 무엇입니까? –
예상 이전) [(또는 이와 비슷한) –
첫 번째'typedef'에는 행렬 (일명 2D 배열)이없고, 하나를 가리킬 수있는 것도 없습니다. 포인터가 배열이 아닙니다! 그리고 배열을 함수간에 전달할 수 없습니다. – Olaf