スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
.-- -- スポンサー広告 comment(-) trackback(-)

C語メモ書き:ポインタの練習2

で、構造体へのポインタを使ったアクセスには専用の演算子があるのだそう。

->で→に見えるからアロー演算子。。。

ひねりがない方が覚えやすくていいわね。

で、練習

/**************************************************************/
#include
#include

typedef struct
{
  int x;
  int y;
} POINT;

void restrict_point(POINT* pt)
{
  if(0 > pt -> x)
    pt -> x = 0;
  if(0 > pt -> y)
    pt -> y = 0;
  if(100 < pt -> x)
    pt -> x = 100;
  if(100 < pt -> x)
    pt -> y = 0;
}

int calc_area(POINT* pt1, POINT* pt2)
{
   restrict_point(pt1);
   restrict_point(pt2);
   return abs(pt1->x - pt2->x)*abs(pt1->y - pt2->y);
}

int main(void)
{
   POINT point_01 = {0, -15};    /** 0, 0 **/
   POINT point_02 = {189, 76};   /**100, 76**/
   pritnf("area = %d \n", cala_area(&point_01, &point_02));
   return 0;
}

/*************************************************************/

% cc -o ptr_area ptr_area.c -lm
% ./ptr_area
area = 7600

って、なりました。

でも、まだ参考書に踊らされてるだけで

まだ理解出来てません
スポンサーサイト
.03 2010 C語:ポインタ comment0 trackback0

C語メモ書き:構造体とポインタ

構造体へのポインタの場合、

ポインタに対する間接参照と

構造体へのメンバアクセスという2段階のステップが入る。

つまり、

ポインタを間接参照すれば構造体が得られる。

struct alaingment
{
  int ID;
  char seq;
};

struct alaingment  ala1;
struct alaingment* p_ala1=&ala1;

これで、

alaingment構造体の変数ala1と、alaingment構造体へのポインタp_ala1が定義できる。

で、メンバのIDにアクセスする時は

(*p_ala1).ID

とすると正しくアクセスできる。

*p_ala1.ID

で、良さそうなのですが演算子の優先順位が

*演算子の方が、.(ピリオド)演算子よりも低いので()丸カッコで優先順位を調節。


ややこしいの~。(ぼそり)

.03 2010 C語:ポインタ comment0 trackback0

C語メモ書き:ポインタの練習1

習うより慣れろ

というわけで、最近Pythonばっかり使ってたから

久しぶりにCでポインタの練習で簡単なプログラムを書いてみました。

/*************************************************************/

#include

void ptr_int(int* val1, int* val2)
{
  int box = *val1;
  *val1 = *val2;
  *val2 = box;           /** 入れ替え **/
}

void  ptr_double(double* val1, double* val2)
{
  double box = *val1;
  *val1 = *val2;
  *val2 = box;
}

int  main(void)
{
  int  int_a = 418, int_b = 702;
  double dou_a = 3.1415, dou_b = 1.4142;

  printf("the value (before) %d %d \n", int_a, int_b);
  ptr_int(&int_a, &int_b);
  printf("the value (after) %d %d \n", int_a, int_b);

  printf("the value (before) %f %f \n", dou_a, dou_b);
  ptr_double(&dou_a, &dou_b);
  printf("the value (after) %f %f \n", dou_a, dou_b);

  return 0;
}

/**************************************************************/

久しぶりすぎて

コンパイルの仕方も忘れて思わずメモ見ましたよ!!

で、コンパイルしてプログラムを実行すると

% ./ptr_01.c
the value (before) 418 702
the value (after)  702 418
the value (before) 3.141500 1.414200
the value (after)  1.414200 3.141500

って、なりました!!

なるハズゥ~
.01 2010 C語:ポインタ comment0 trackback0

C語メモ書き:C言語とポインタ型

さてぇ~。

ポインタね。。。

まずは関数にポインタを渡すというのが、

ポインタを使う上でメリットを感じるとこらしい。。。



「関数は戻り値を1つしか返せない。」

というのが弱点らしいけど

今まで、それで困ったことはないのよねぇ~。

ま、

とりあえず、関数呼び出しの際にパラメータをどう渡すかということは

知っておいた方が良いということです


パラメータの値渡し

パラメータを値で渡す。

関数呼び出しの時に、変数の複製を作って、

関数内では複製された変数を使う。

なので、関数内で変数に値を代入しても、呼び出した側の変数には影響を与えない。


パラメータの参照渡し

パラメータを参照で渡す。

呼び出された関数内で変数にアクセスしたら、

参照と通じて、呼び出しもとの変数にアクセスできる。

なので、関数内で変数に値を代入したら、呼び出しもとの変数に影響を与える。


つまり

ポインタを使って、参照渡しを行えば

関数内からポインタ経由で呼び出しもとの変数を操作出来る



スゴいね。

今までは思いつきでプログラム書いてたけど

初心に戻って、ちゃんと設計図みたいの

書かないとバグだらけになっちゃうわ
.01 2010 C語:ポインタ comment0 trackback0

C語メモ書き:ポインタは初期化すべし

で、「ポインタとは」

が長くなったので

超ビギナーの自分にポインタを使う際の注意点を記載

ポインタは初期化していないと

どこを指しているのか分からず、事故が起きるんだと。。。

怖いね。。。。

で、たとえば

int  a;
int* pa;
pa = &a;



int  a;
int*  pa = &a;

と書き直すと初期化できるんだとさ。
.29 2010 C語:ポインタ comment0 trackback0
 HOME 

プロフィール

emi

Author:emi
日々、コンピューターとにらめっこしていた2010。
公の仕事に就くことを目指して教科書とにらめっこ2011,spring。
はたして2012は・・・

最新トラックバック

検索フォーム

ブロとも申請フォーム

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。