-
Notifications
You must be signed in to change notification settings - Fork 25
/
ch07s04.html
8 lines (8 loc) · 3.65 KB
/
ch07s04.html
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>4. 嵌套结构体</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Linux C编程一站式学习" /><link rel="up" href="ch07.html" title="第 7 章 结构体" /><link rel="prev" href="ch07s03.html" title="3. 数据类型标志" /><link rel="next" href="ch08.html" title="第 8 章 数组" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4. 嵌套结构体</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch07s03.html">上一页</a> </td><th width="60%" align="center">第 7 章 结构体</th><td width="20%" align="right"> <a accesskey="n" href="ch08.html">下一页</a></td></tr></table><hr /></div><div class="sect1" lang="zh-cn" xml:lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2731550"></a>4. 嵌套结构体</h2></div></div></div><p>结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。换句话说,结构体的成员可以是另一个结构体,即结构体可以嵌套定义。例如我们在复数的基础上定义复平面上的线段:</p><pre class="programlisting">struct segment {
struct complex_struct start;
struct complex_struct end;
};</pre><p>从<a class="xref" href="ch07s01.html#struct.intro">第 1 节 “复合类型与结构体”</a>讲的Initializer的语法可以看出,Initializer也可以嵌套,因此嵌套结构体可以嵌套地初始化,例如:</p><pre class="programlisting">struct segment s = {{ 1.0, 2.0 }, { 4.0, 6.0 }};</pre><p>也可以平坦(Flat)<a id="id2731587" class="indexterm"></a>地初始化。例如:</p><pre class="programlisting">struct segment s = { 1.0, 2.0, 4.0, 6.0 };</pre><p>甚至可以把两种方式混合使用(这样可读性很差,应该避免):</p><pre class="programlisting">struct segment s = {{ 1.0, 2.0 }, 4.0, 6.0 };</pre><p>利用C99的新特性也可以做Memberwise Initialization,例如<sup>[<a id="id2731613" href="#ftn.id2731613" class="footnote">15</a>]</sup>:</p><pre class="programlisting">struct segment s = { .start.x = 1.0, .end.x = 2.0 };</pre><p>访问嵌套结构体的成员要用到多个.运算符,例如:</p><pre class="programlisting">s.start.t = RECTANGULAR;
s.start.a = 1.0;
s.start.b = 2.0;</pre><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.id2731613" href="#id2731613" class="para">15</a>] </sup>为了便于理解,<a class="xref" href="ch07s01.html#struct.intro">第 1 节 “复合类型与结构体”</a>讲的Initializer语法并没有描述这种复杂的用法。</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch07s03.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch07.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch08.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">3. 数据类型标志 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 8 章 数组</td></tr></table></div></body></html>