C言語入門(17) 様々な所で使われているポインターの意味

Posted: 2012年12月03日

様々な箇所で使用されているポインターの意味がわかれば
その処理を正しく実装ができる
ポインターをわかっていてもそのポインターの意味するものを間違えると
損している場合もあるのでここで押さえていきたい!!
例えば、FILE*とか
詳しくは把握していないので推論しか書いていませんが・・・



カテゴリー: プログラム, 入門 | タグ: , , | コメント無し »

C言語入門(16) ポインターはわかったけど参照(&)って?

Posted: 2012年11月21日

これまでの解説でポインター(*)について書いてきましたが
参照(&)とは何か

参照では、自身のメモリーアドレスを返します。

int nResult = *(&var);

この場合は、自身のアドレスを取得後
nResultにそのアドレスの値を代入します。
つまり

int nResult = var;

と同様
「*と&は逆の操作ができる」と覚えることを薦めます。

実際にはどのような使い方をしているのでしょうか?



カテゴリー: プログラム, 入門 | タグ: , , | コメント無し »

C言語入門(15) そもそもメモリーって一体何なのか

Posted: 2012年10月30日

いままでポインターについて書いてきましたが
メモリーって一体何なのか

メモリー

様々な言い方はありますがメインメモリー

こんなやつ



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(14) ポインターはいつ使うべきなのか(3)

Posted: 2012年09月04日

前回は何も書きませんでしたが、今回も続きものです。
続きということでおらさい

前回と前々回は、

  • 配列のアクセス
  • 関数の引数
  • 関数ポインタ
  • 可変配列

を行いました。

では、さっさと見て行きましょう!!



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(13) ポインターはいつ使うべきなのか(2)

Posted: 2012年08月28日

前回の続きということでおらさい

前回は、

  • 配列のアクセス
  • 関数の引数

を行いました。

では、さっさと見て行きましょう!!



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(12) ポインターはいつ使うべきなのか

Posted: 2012年07月16日

いままでは、ポインターとは何かやポインタの宣言の仕方を書きましたが
今回は、ポインターの使用方法を書きます。

具体的には、
一般的にどの場合に使用するか、その場合どの利点があるか
ということです。



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(11) ポインターって何が難しくて、みんな苦しんでいるのか

Posted: 2012年07月02日

ポインターは難しいとよく聞きますし、
私自身もポインターを理解しているかいないかで、良いプログラムが書けるかの差になってくると思っています。
理解すればCプログラマーの土台ができたと言っても過言ではありません。

まずポインターとは何か

コンピュータのシステムで説明すると「ショットカットファイル」です。
1MbyteのWordファイルが存在するとします。
コピーしてそのファイルを編集した場合、変更されるファイルは、コピーしたファイルで
コピー元は変更されません。
また、1Mbyte ☓ 2の記憶容量が使用されます。
しかし、コピーではなくショットカットファイルを作成した場合
変更されるファイルは、ショットカットファイルが指し示すファイルです。
また、1Mbyte + 数Kbyteの記憶容量が使用されます。

コピー ショートカット
データサイズ 元のデータ☓コピー数 元のデータ+ショットカットファイルサイズ☓ショットカットファイル数
編集 元のデータは変更されない 元のデータは変更される
処理時間 元データのサイズが大きくなるほど時間がかかる 元のデータのサイズは関係なく作成できる

状況によって普段使い分けていると思います。

これをコピーは元データと同様の変数、ショートカットは、ポインター変数に置き換えて考えてみましょう



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(10) 配列はなぜ固定サイズ?

Posted: 2012年06月25日

「C言語入門(9) 配列って?」では特に記述しませんでしたが
配列は、固定サイズしかありません。

 int aryTemp[5];
 // int aryTemp2[sizeof(aryTemp)]; ERROR
 // sizeofはサイズ取得関数

他の言語では、配列のサイズが固定ではない場合もあります。
C言語では、なぜ配列サイズが固定なのか(”ここからは、私自身が勝手に思っていることで間違えている可能性があります。”)
機械語に近い言語のため、処理スピードを考えてかつ、メモリーを使いすぎないようにしたためだと思われます。

処理スピード

固定長の配列のみしか作成できなければ、実行されるたびに領域を確保するのではなく
起動時に領域を確保することもできます。(実際はどのようになっているか把握していません)

メモリー

変数がメモリーに確保される場合は、「スタック」と言った領域に確保されます。
他の領域には、「コード」「データ」「ヒープ」が存在しています。
動的に領域を確保する場合には、「ヒープ」を使用します。
サイズが決まっていない、データは、「ヒープ」を用いることで「スタック」のメモリーを削減しようと考えたかと思います。

C言語には、固定長と、可変長の配列が存在しています。
そのため、実際には、ほとんど可変長配列を使用することになります。
可変長配列は、固定長と異なり、領域を確保し、解放する処理をプログラマーが意識する必要があります。
この処理には以下の障害が伴うため、注意が必要です。

  • 解放を忘れれば メモリーリーク(メモリーの無駄遣い)
  • 何度も解放をすれば メモリーデータの破壊(解放対象ではないデータを解放してしまう)

注意が必要と記述しましたが、これを守っているソフトウェアはそんなにありません。
そのため、この処理をコンピュータが行う言語「Java等」が作成されました。

C言語で書く場合は、忘れてはいけないことです。
可変長配列は、メモリーに関わってくる話のため
ここでは解説せずにのちのち解説をしていきたいと思います。



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(9) 配列って?

Posted: 2012年06月19日

配列って言われても、なんのことだかさっぱりかもしれません。
配列で検索をすると、プログラミングに関する話題がほとんどで
あまり使わない言葉ですが〜

配列は、変数を複数定義したものです。

 int a,b,c,d,e;

5個ならまだ適当に変数名を割り当てられますが
100,200になると記述するだけで無駄な時間を過ごすことになります。
そんな時には、配列という記述を用いることで簡単に定義することが可能です。

 // 型 変数名[変数個数];
 int ary[5];

ただ、関係のない変数をまとめるために使用すると
設定された値の意味がわからなくなり不具合の元になるため
やめたほうがいいでしょう

 int nYear, nSex, nEmpNumber;
 int naryEmp[3]; // 0 year 1 sex 2 empnumber

この場合は、コメントで補足しても不具合の元になると思われます。

最適な配列の使い方はどのような方法があるでしょうか?



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

C言語入門(8) ループ処理の中断

Posted: 2012年04月22日

ループ処理を中断したいときにはどうすればよいか
例えば、配列のデータを検索する場合

プログラムプログラム:

 bool bFound = FALSE;
 for (int nAryIndex = 0; nAryIndex < sizeof(aryData); nAryIndex++) {
     if (aryData[nAryIndex] == searchData) {
         // 見つかった
         bFound = TRUE;
     }
 }

データが見つかった場合、それ以上ループを続ける必要は無く
無駄に処理をすることになります。

10000データの配列で5回目のループでデータが見つかった場合 9995回無駄になります。
とてもエコじゃない!!

この場合のエコなプログラムをどのように書けばいいか



カテゴリー: プログラム, 入門 | タグ: , | コメント無し »
Page 5 of 6123456