GoogleAnalyticsからおめでとーというメールが来て何かと思ったら1日のアクセス数が一定に達したという内容だったので、ちょいと調べてみたらGIGAZINさんのヘッドラインにうちのページが載ってた。
その日のアクセス数は通常の3倍どころか、5倍だったわ。
巨大コンテンツの宣伝効果というのは計り知れないなと思った今日この頃です。
さて本題ですが、in構造体って何か使い方おかしくね?って突っ込みはなしでスルーしてください。
前橋さんのC言語ポインタの教本は4章を読み終わったところですが、やっぱり構造体については理解が足りてナースだなあと感じていたので、C++の勉強をちょっとだけ始めてみたりした。
ここに勉強していたウェブサイトのリンクを貼ろうとしたんだけど、ブックマークしていたページがどこかにいってしまったorz
てな訳で、C++については何をやったかというと、クラスとかオブジェクトとかのサンプルコードを見ながら書いて実行してと、軽く勉強してたわけだけど、Cの参考書とかいろんなHowTOサイトの構造体の教え方にはちょっと疑問をもっていて、構造体って教本を通してみて比較的最後の方に出てくる内容なのはどこも同じなんだけど、それまでのプログラムの問題って変数を使って演算をしたり、計算をしたり(一緒かな?)軽いゲームを作ったりとやってきたのに、構造体の話になったら突然名簿とかの作成になる、そこが大いにWhy?。
一般的にはそれが分かりやすいのかもしれないけど、自分にはしっくりこないし、いきなりエクセルみたいな問題で分かりにくい。
セオリー通りにいくと、今までにやってきたプログラムを構造体を使って書き換えてみようってのがスムーズじゃないかって思うんだな。ってことで、プログラムの意味とか効率とかは考えないでとにかく構造体を使うってことに重きをおいてやってみた。
で実際にやってみて、やっぱり自分にはこういうやり方が合っているな~と思う。
と大げさな事を書いているけれど、内容については初歩の初歩のプログラムをたんたんと書き換えているだけなので、過度な期待はしないでください。
やっぱり1発目はこれかな。
そーす
#include <stdio.h> int main(void) { typedef struct{ char a[10]; char b[10]; }start; start word = {"Hello", "World"}; printf("%s %s \n", word.a, word.b); }
実行結果
% ./a.out Hello World
2個目は2個の数字を比較して表示するだけだけど、実際にやった事はポインタのアドレスを表示させてみたり、標準入力をfgetsとsscanfにして出力する値をcharのポインタから値をとったりしてみたりしたので、載せているプログラムで得たもの以外も多いです。
少なくとも名簿を操作するプログラムよりはだんぜん理解度が上がった。
そーす
#include <stdio.h> typedef struct{ int n1; int n2; }hensu; void hikaku(hensu *std) { if(std->n1 == std->n2) printf("%dと%dは等しいです。\n", std->n1, std->n2); else if(std->n1 > std->n2) printf("%dの方が大きいです。\n", std->n1); else printf("%dの方が大きいです。\n", std->n2); } int main(void) { hensu moji; printf("好きな数字を入力してください \n"); printf("1個目 : "); scanf("%d", &moji.n1); printf("2個目 : "); scanf("%d", &moji.n2); hikaku(&moji); return 0; }
ってことで2個ほど例題をやったら割とスッキリしてしまったので、先に進もうと思います(笑)
構造体のありがたい特性の一つですが,構造体のメンバのメモリは連続して確保されます.
適当なバイナリデータを,構造体長分だけ構造体にキャストすると自動的に格納されるなど,便利な性質です.
ソケットプログラミングでは,ヘッダの変換などに使われています.
startのブロブラムを少しいじらせてもらいました.