構造体単語

コウゾウタイ

構造体とは、プログラミング言語において複数のデータをまとめるためのデータ構造の1つである。

概要

プログラムで扱われるデータには、同時にまとめて扱われるものが存在する場合がある。そのようなデータを扱うのに便利なのが構造体である。

例えば、複素数の計算を行うプログラムを考えてみよう。複素数を標準で扱えないプログラミング言語も多いが、そのようなプログラミング言語では、その複素数の実部と虚部は別のデータとして異なる変数に格納されなければならない。構造体を用いない場合のコードは以下のようになるだろう。

int multiply_real(int a_real, int a_imaginary, int b_real, int b_imaginary) {
    return a_real * b_real - a_imaginary * b_imaginary;
}

int multiply_imaginary(int a_real, int a_imaginary, int b_real, int b_imaginary) {
    return a_real * b_imaginary + a_imaginary * b_real;
}

これでも複素数計算が実装できると言えばできるのだが、実部と虚部という本来同時に扱われるものを別々に扱わなければならないとなると、コード読み辛くなり混乱の元にもなる。そういう本来同時に扱われるべきデータは同じ変数にまとめてしまえるようにする、というのが構造体の基本的な考え方である。構造体を使った疑似コードは以下のような感じになる。(実際のコードプログラミング言語によって書き方が異なる。)

struct complex {
    int real;
    int imaginary;
}

complex multiply(complex a, complex b) {
    complex result;
    result.real = a.real * b.real - a.imaginary * b.imaginary;
    result.imaginary = a.real * b.imaginary + a.imaginary * b.real;
    return result;
}

虚部と実部が一つのcomplex構造体に格納された結果、最初のコードべて随分と読みやすく且つ扱いやすいコードになったことがお分かりいただけただろうかC言語だとmallocとかしないといけないが……ごにょごにょ。

オブジェクト指向では、変数だけではなくメソッドをまとめることもできるクラスと呼ばれる概念が用意されているが、その言構造体サポートする場合にそれがクラスとどう違うかは言によって異なる。

関連動画

関連商品

関連コミュニティ

関連項目

【スポンサーリンク】

スマホ版URL:
https://dic.nicovideo.jp/t/a/%E6%A7%8B%E9%80%A0%E4%BD%93

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

構造体

1 ななしのよっしん
2012/10/23(火) 01:40:03 ID: 52DFnxKn/k
素数演算ってわりと使うのに標準でサポートしてない言が多いのはなんでだぜ?(Fortranなんかはちゃんととしてある)

あと、「構造体」って呼び方が使われるのって言としてはC/C++だけじゃないの??
「複数のデータをまとめ」て一変数みたいに扱う言はいくらでもあるけど
2 ななしのよっしん
2014/01/06(月) 19:42:42 ID: 6wIfrVLgNp
構造体の例として複素数が出てくるのに吹いた
むしろオブジェクト指向とか演算子カスタマイズの方で例に出すべきだろう

構造体レコードデータベースにぴったりフィットする機
住所録とか伝票とかの方が自然
>>1
素数が必要なのはおおむねアカデミックな分野だからFortran,Lispで十分なんじゃないの
業務・ビジネス系が戦場だと小数すら使わないなんてこともw
3 ななしのよっしん
2016/07/24(日) 17:44:29 ID: PVRlh4RbN+
遅レスだが、リテラルの扱いが面倒くさいからだろう。虚数をどう表記するかとか、+という非常に単純なオペレーターの解釈がややこしくなるのは辛い
ちなみに、Cの場合言の粒度から言って構造体+関数で実現すべき内容だからfirst classにならないのは同然。ただしライブラリは標準規格に入ってる。

急上昇ワード