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

112 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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>