*

C言語 バッファオーバーランまで 関数の引数ポインタ

公開日: : Mac

関数引数としてのポインタ

今回は関数引数としてのポインタに関して。
バッファオーバーランを試す前に色々復習と予備知識を補います。

シリーズ

C言語 バッファオーバーランまで ポインタ考察編
・C言語 バッファオーバーランまで 関数の引数ポインタ

動作環境

windows7 x86?
cygwin 1.7.16?

予備知識

・メモリの大まかな概念
10-3.ポインタと文字列

ソースコード

オライリー先生は優秀です。
優秀故に素人にはハードルが高い場合があります。
オライリー先生のソースコードにコメントと数行のソースコードを足しただけです。

#include 

void inc_count(int *count_ptr);
int main(void);

void inc_count(int *count_ptr)
{
  // アドレス(ポインター)として引数を受け取り
  //「*count_ptr」を付け実態を参照、数をインクリメント
  ++(*count_ptr);
}

int main(void)
{
  int count = 0;

  while (count < 10)
    // countの参照しているアドレス(ポインター)を引数として関数呼び出し
    inc_count(&count);
  
  // output [ 10 ]
  printf("count : %d", count);

  return 0;
}

解説すると関数の引数に変数が参照しているアドレスを渡して、
関数側はアドレスの参照する実態の数をインクリメントする。

別にアドレスじゃなくて、引数にそのまま数を渡せば良いのでは?
と思ったら思考回路はショート寸前です。はい。自分の事ですが何か?

ダメソースコード

C言語はまだまだ勉強中ですが、ぱっとみでこれは「ダメダナ(・x・)」

#include 

int inc_count(int count);
int main(void);

int inc_count(int count)
{
  ++(count);
  return count;
}

int main(void)
{
  int count = 0;

  while (count < 10)
    count = inc_count(count);

  printf("count : %d", count);

  return 0;
}

なんで「ダメダナ(・x・)」の理由は、
・返却値として受け取った値を代入し直してる。
・関数側でも返却値を呼び出される度に返却してる。

一昔前のマシーンではリソースが今程ではなかったので、ソースコードをいかに
スマートに書くかに重点が置かれてたらしいのですが?(※知ったかぶりです)
今は可読性を上げるほうが重要になってます。

この辺りがゆとり世代と言われる所以!?などと思ったりしなかったり?

実際はこんな単純な話ではないし、コード量が増えたりした場合
、構造体やオブジェクトを扱う場合はどうなるのか?
などの疑問は残りますが、知識を徐々に深めたいと思います。

次回

次回に続け!

関連記事

Macで ローカルサーバー構築 ローカルネットワーク参加編

Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載

記事を読む

Macで ローカルサーバー構築 PHP設定編

Macで ローカルサーバー環境を構築するまで PHP設定編 ネットでの情報は必要最低限しか載ってな

記事を読む

Macで ローカルサーバー構築 Apache起動編

Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載

記事を読む

Macで ローカルサーバー構築 Postfix基本編

Macで ローカルサーバー環境を構築するまで Apache起動編 ネットでの情報は必要最低限しか載

記事を読む

Macで ローカルサーバー構築 Apache設定編

Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載

記事を読む

jQuery 水平スクロール&cssでカスタム可能なスクロールバーなプラグイン

水平スクロール&cssでカスタム可能なスクロールバーなプラグイン j

C言語 バッファオーバーランまで 関数の引数ポインタ

関数引数としてのポインタ 今回は関数引数としてのポインタに関して。

C言語 バッファオーバーランまで ポインタ考察編

趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り

Google Cloud Messaging プロジェクトナンバー API Key取得編 2014/07最新版

Google Cloud Messaging プロジェクトナンバー A

jQuery removeClass 特定のクラスを全て削除

特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があっ

→もっと見る

PAGE TOP ↑