構造体へのポインタ

前項(構造体の配列)では、惑星の軌道要素をまとまりとして、扱ってみましたが、 これを、「malloc」関数を利用して、ポインタ型として処理してみたいと思います。 内容的には、前項の「構造体の配列」と殆ど同じことを行っています。

構造体へのポインタは、間接演算子「*」を使って、参照することも出来ますが、 ポインタとして定義した構造体メンバへのアクセスは、「->」(矢印演算子)を使って下記のように行うことも出来ます。
plt1->planetnm = "earth";

ポインタとして定義した構造体の間接演算子での表記例=(*plt1).planetnm,  (*plt1).a

#include <stdio.h>
#include <stdlib.h>

typedef struct {
	char *planetnm;				/* 惑星の名称 */
	double a;					/* 長半径 */
	double incln;				/* 軌道傾斜角 */
	int dist;					/* 太陽からの距離 */
	double revol;				/* 公転周期 */
} planet;

void planet_set(planet* );		/* 惑星の軌道要素の設定関数プロトタイプ宣言 */	
void planet_out(planet* );		/* 惑星の軌道要素の表示関数プロトタイプ宣言 */

int main(void )
{
	planet *plt1;			/* 構造体へのポインタ変数定義 */

	/* 構造体の動的メモリ割付 */
	plt1 = (planet*)malloc(sizeof(planet) * 5);

	planet_set(plt1 );			/*惑星の軌道要素の設定 */

	planet_out(plt1 );			/* 惑星の軌道要素の表示 */

	free(plt1);			/* 構造体の動的メモリ解放 */

	return 0;
}

DOS画面

planet_set関数では、ポインタを1つづつ進めて、各惑星のアドレス位置まで移動した後、 値を設定しています。又、構造体の始めのポインタ位置(アドレス)を記憶しておいて、 最後に、記憶しておいた最初の位置へ、ポインタを戻してやります。 planet_out関数でも、同様の方法で、ポインタ移動を行っています。

関数の詳細は、下記のソースファイルで、確認願います。

サンプルソース(avaloky6b.cpp)

サイト紹介
サイトマップ
C言語入門
Web制作入門
Web素材集
フリーソフト紹介
リンク集
関連書籍の紹介
連絡フォーム

C言語入門
29a←[29b]→30


.