blog/content/post/2008-05-01-00000900.md

112 lines
6.5 KiB
Markdown
Raw Normal View History

2019-03-31 11:00:21 +00:00
---
title: 『新版C言語プログラミングレッスン 入門編』第10章・構造体
author: kazu634
date: 2008-05-01
url: /2008/05/01/_966/
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3965;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- C
- Programming
---
<div class="section">
<h4>
構造体とは?
</h4>
<blockquote title="Amazon.co.jp 新版C言語プログラミングレッスン 入門編: 結城浩: 本" cite="http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10">
<p>
複数の異なる型の変数を一つにまとめたもの
</p>
<p>
<cite><a href="http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10', 'Amazon.co.jp 新版C言語プログラミングレッスン 入門編: 結城浩: 本');" target="_blank">Amazon.co.jp 新版C言語プログラミングレッスン 入門編: 結城浩: 本</a></cite>
</p>
</blockquote>
<blockquote title="Amazon.co.jp 新版C言語プログラミングレッスン 入門編: 結城浩: 本" cite="http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10">
<p>
たとえば、学校の成績処理を考えるとしましょう。ある学生を処理しようとしたとき、その学生は「複数の異なる型」のデータを持っています。つまり
</p>
<ul>
<li>
出席番号
</li>
<li>
氏名
</li>
<li>
国語の点数
</li>
<li>
数学の点数
</li>
<li>
英語の点数
</li>
</ul>
<p>
などです。このとき、氏名は文字の配列、出席番号や点数は整数…、と別々の変数にして取り扱ってもかまいません。しかし、出席番号・氏名・点数はある一人の学生のデータなどですから、できれば一つにまとめて扱いたいものです。「構造体」はそんなときに使うのです。
</p>
<p>
<cite><a href="http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/%E6%96%B0%E7%89%88C%E8%A8%80%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%AC%E3%83%83%E3%82%B9%E3%83%B3-%E5%85%A5%E9%96%80%E7%B7%A8-%E7%B5%90%E5%9F%8E%E6%B5%A9/dp/4797336781/ref=sr_1_10', 'Amazon.co.jp 新版C言語プログラミングレッスン 入門編: 結城浩: 本');" target="_blank">Amazon.co.jp 新版C言語プログラミングレッスン 入門編: 結城浩: 本</a></cite>
</p>
</blockquote>
<p>
<a name="seemore"></a>
</p>
<h4>
使い方の例
</h4>
<pre class="syntax-highlight">
<span class="synPreProc">#include </span><span class="synConstant">&#60;stdio.h&#62;</span>
<span class="synPreProc">#include </span><span class="synConstant">&#60;string.h&#62;</span>
<span class="synComment">/* プロトタイプ宣言 */</span>
<span class="synType">struct</span> student
{
<span class="synType">int</span> id;
<span class="synType">char</span> name[<span class="synConstant">20</span>];
<span class="synType">int</span> japanese;
<span class="synType">int</span> math;
<span class="synType">int</span> english;
};
<span class="synType">int</span> main(<span class="synType">void</span>);
<span class="synType">void</span> prt_student(<span class="synType">struct</span> student s);
<span class="synComment">/* 関数 main */</span>
<span class="synType">int</span> main(<span class="synType">void</span>)
{
<span class="synType">struct</span> student taro;
<span class="synType">struct</span> student jiro;
taro.id = <span class="synConstant">10</span>;
strcpy(&#38;taro.name[<span class="synConstant"></span>], <span class="synConstant">&#34;Yamada&#34;</span>);
taro.japanese = <span class="synConstant">100</span>;
taro.math = <span class="synConstant">85</span>;
taro.english = <span class="synConstant">60</span>;
jiro = taro;
jiro.id = <span class="synConstant">11</span>;
strcpy(&#38;jiro.name[<span class="synConstant"></span>], <span class="synConstant">&#34;Jiro&#34;</span>);
jiro.japanese = <span class="synConstant">99</span>;
prt_student(taro);
prt_student(jiro);
<span class="synStatement">return</span>(<span class="synConstant"></span>);
}
<span class="synComment">/* 関数 prt_student */</span>
<span class="synType">void</span> prt_student(<span class="synType">struct</span> student s)
{
printf (<span class="synConstant">&#34;ID: </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, s.id);
printf (<span class="synConstant">&#34;Name: </span><span class="synSpecial">%s\n</span><span class="synConstant">&#34;</span>, &#38;s.name[<span class="synConstant"></span>]);
printf (<span class="synConstant">&#34;Japanese: </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, s.japanese);
printf (<span class="synConstant">&#34;Math: </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, s.math);
printf (<span class="synConstant">&#34;English: </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, s.english);
printf (<span class="synConstant">&#34;Total: </span><span class="synSpecial">%d\n</span><span class="synConstant">&#34;</span>, s.japanese + s.math + s.english);
printf (<span class="synConstant">&#34;</span><span class="synSpecial">\n</span><span class="synConstant">&#34;</span>);
}
</pre>
</div>