(Translated by https://www.hiragana.jp/)
复合类型 - 维基百科,自由的百科全书

ざい计算つくえ科学かがくなか复合类型いちかずすえ类型,它可以原始げんし类型かず其它てき复合类型しょ构成。构成一个复合类型的动作,またしょうさく组合

structこれ C C++ てき复合类型概念がいねんいち个将だんあるなり以一定组合方式所组成的资料类型。よし为在宣告せんこく时,使用しようりょう关键 struct所以ゆえん它简しょう结构あるものさらせい确地说よう户定义的すうすえ结构

ざい C++ さとstruct あずかclassてきただ一区别是默认的访问とうclassこれ私有しゆうてきstruct 则是公有こうゆうてき

注意ちゅういつきかんてき概念がいねん关键classC++しん引入てきC语言也已备粗糙的 struct 类型。对于所有しょゆうてき图和目的もくてき, C++ てきstruct C struct てきちょうしゅう:几乎所有しょゆう合法ごうほうてき C struct 也是合法ごうほうてき C++ struct,并有しょうどうてき语义。

struct 宣告せんこく组成一个字段清单,其中てきごと一个可以是任意类型。对于 struct 对象しょ需的そん储区,そく为全だんてき总合,さいじょう内部ないぶてき补白。

れい如:

 struct Account {
    int account_number;
    char *first_name;
    char *last_name;
    float balance;
 };

てい义一个称为 struct Account てき类型。わかよう建立こんりゅう此类がたてきしん变量,以写为 struct Account myAccount;,它有いち个以 myAccount.account_number 访问てき整数せいすう组件,且有いち个以 myAccount.balance 访问てき浮点すう组件,以及 first_name last_name 组件。myAccount 包含ほうがん这四个数值,且这四个字段可各自改变。よしstruct account てきうつしほうゆう些累赘,ざい C だい码中,typedef 语句并不罕见,其为 struct 提供ていきょう一个更简便的同义词。れい如:

 typedef struct Account_ {
    int    account_number;
    char   *first_name;
    char   *last_name;
    float  balance;
 } Account;

ざい C++ ちゅう,并不需要じゅよう typedefいん为使ようりょう struct てき类型てい义,やめ命名めいめいそら间的いち部分ぶぶん所以ゆえん该类がたしょうさく struct Account ある较简单的 Account

其它れい,一个使用了浮点数资料类型的三维向量复合类型,如此建立こんりゅう

 struct Vector {
   float x;
   float y;
   float z;
 };

いち个以 Vector 复合类型为类がたてき变量めい velocity宣告せんこくVector velocity;以用てん运算(.)访问 velocity てきなり员。れい如,velocity.x = 5;かい使 velocity てき组件 x とう于 5。

どう样地,一个颜色结构可如此建立:

 struct Color {
   int red;
   int green;
   int blue;
 };

ざいさん维图ぞうちゅう,必须经常不断ふだんつい踪每一个顶点的位置和颜色。使用しようまえしょ建立こんりゅうてき Vector Color 复合类型らい建立こんりゅう Vertex 复合类型:

 struct Vertex {
   Vector position;
   Color color;
 };

以同样的格式かくしき建立こんりゅういちVertex 类型てき变量:Vertex v;,并以如下方式ほうしきゆびすう值给 v

   v.position.x = 0.0;
   v.position.y = 1.5;
   v.position.z = 0.0;
   v.color.red = 128;
   v.color.green = 0;
   v.color.blue = 255;

原始げんし类型检查

编辑

刚开はじめ使用しようてき structようらいけん构组あい资料类型,过有时它ようらい避开标准 C 协议,以建立原たちはらはじめ类型检查(primitive subtyping)。れい如,共同きょうどうてき网络协议依赖于以下いかこと实,C 编译以可预料てき方法ほうほうざい结构段之だんし间补しろよし此代このしろ

 struct ifoo_old_stub {
    long x, y;
 };
 struct ifoo_version_42 {
    long x, y, z;
    char *name;
    long a, b, c;
 };
 void operate_on_ifoo(struct ifoo_old_stub *);
 struct ifoo_version_42 s;
 . . .
 operate_on_ifoo(&s);

はたせい确运さく

まいり

编辑