112 lines
6.5 KiB
Markdown
112 lines
6.5 KiB
Markdown
|
---
|
|||
|
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"><stdio.h></span>
|
|||
|
<span class="synPreProc">#include </span><span class="synConstant"><string.h></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(&taro.name[<span class="synConstant"></span>], <span class="synConstant">"Yamada"</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(&jiro.name[<span class="synConstant"></span>], <span class="synConstant">"Jiro"</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">"ID: </span><span class="synSpecial">%d\n</span><span class="synConstant">"</span>, s.id);
|
|||
|
printf (<span class="synConstant">"Name: </span><span class="synSpecial">%s\n</span><span class="synConstant">"</span>, &s.name[<span class="synConstant"></span>]);
|
|||
|
printf (<span class="synConstant">"Japanese: </span><span class="synSpecial">%d\n</span><span class="synConstant">"</span>, s.japanese);
|
|||
|
printf (<span class="synConstant">"Math: </span><span class="synSpecial">%d\n</span><span class="synConstant">"</span>, s.math);
|
|||
|
printf (<span class="synConstant">"English: </span><span class="synSpecial">%d\n</span><span class="synConstant">"</span>, s.english);
|
|||
|
printf (<span class="synConstant">"Total: </span><span class="synSpecial">%d\n</span><span class="synConstant">"</span>, s.japanese + s.math + s.english);
|
|||
|
printf (<span class="synConstant">"</span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
|||
|
}
|
|||
|
</pre>
|
|||
|
</div>
|