関数から構造体を返す一般的な手法は
たとえば下のような平面上の点を表す構造体があって、
typedef struct {
const int x;
const int y;
} Point;
2点間の中心を計算する関数を書くとします。
この場合、計算結果をどのように返せばよいでしょうか。
「ただ動けばよい」コードを書くことはできるのですが、
私が知りたいのは、どのような書き方が一般的かということです。
構造体の要素が const なので、
下のコードはコンパイルできません。
void center(Point* result, Point* p1, Point* p2) {
result->x = (p1->x + p2->x) / 2;
result->y = (p1->y + p2->y) / 2;
}
新しいオブジェクトを作ってコピーする?
void center(Point* result, Point* p1, Point* p2) {
Point p = { (p1->x + p2->x) / 2, (p1->y + p2->y) / 2 };
memcpy(result, &p, sizeof(Point));
}
この例のような小さい構造体であれば、
オブジェクトをまるごとリターンしてもよい?
Point center(Point* p1, Point* p2) {
Point p = { (p1->x + p2->x) / 2, (p1->y + p2->y) / 2 };
return p;
}
あるいは、そもそも構造体の要素を const にする手法は
C言語では一般的でないのでしょうか?
どうかご教授願います。
お礼
沢山のURL有難うございました! とても助かりました。 構造化手法は、構造化プログラミングとも言うのですね。初心者なので、全く気づきませんでした。