2015年7月27日月曜日

【C++の勉強(1)】ポインタとファイル読込・出力

これから、C++の勉強を初めていきます。
まずはじめに、ポインタとファイル読込・出力について、まとめます。

尚、文法等については、省略いたします。

1、ポインタ
(1) 変数の参照渡し
  ポインタptrを宣言して、xのアドレスを設定する
  & 演算子が x の位置を表現する事、* 演算子で p が指すメモリを表現する事を示します。
    int x = 123;
    int *ptr = &x;        //  ptr を宣言し、x のアドレスで初期化


(2) 文字列や配列へのアクセス
配列へのポインタは、次のような書き方をします。
尚、ptr = v; と記載することも可能です

    char v[] = "hoge";
    char *ptr = &v[0]; //  ptr は v[0] を指す


配列を関数に渡すときは、次のように関数宣言します。
void func(int a[])
void func(int *a)
*aとa[ ]は同じ意味になります。

(3) 動的なデータ構造(ポインタのメモリ割り当て)
・malloc を使うときは #include <stdlib.h> を記述する。
・malloc(バイト数) で指定したバイト数のメモリを確保し、そのアドレスを返す
・malloc() の型は void * なので、ポインタに代入する時はキャストを行う
        int *ptr = (int *)malloc(sizeof(int));

・複数のデータ分のメモリを一度に確保したい場合は、その個数倍のサイズを指定する
        int *ptr = (int *)malloc(sizeof(int)*10);     //  int 型データ10個分のメモリを確保

・確保したメモリが不要になった時は、free(ポインタ) によりメモリを解放する
        free(ptr);

※ C++ では、 new, delete を使う方がよい
  int *ptr = new int(12);   //  int 型のメモリを確保し、12 で初期化
  delete ptr;

(4) 多重ポインタ
(5) 関数ポインタ

(4)、(5)については、別の機会にします。

2、ファイル読込
fstreamを使ったり、その他方法ありますが、C言語でも使えるFILEポインタを使った方法で十分であるので、これを使用する。
以下サンプルコードです。
まずstdio.hをincludeして、文字配列bufを200バイトで作成して、data.txtをfopenでFILEポインタのfpに設定します。
ファイルからの読込はfgetsでfpから200バイト読み込みます。

    #include <stdio.h>    char buf[200];    FILE *fp;
 
    fp = fopen(\"data.txt\", \"r\");    fgets(buf,200,fp);

    fclose(fp);

最後にfcloseは忘れずに!  

読込には,freadやfgetsなども使えますが、一行読み込むには、fscanfが一番使いやすいです。
fscanf(fp,"%s",buf);

尚、ファイル内データが数値で羅列している場合は、次のように読み込みます
int i,j;
fscanf(fp,"%d,%d",&i,&j);

3、ファイル出力
ファイル出力については、fprintfを使うのが一番です。
以下サンプルコードです。

    #include <stdio.h>
    FILE* fp;
    char  buffer[] = "test !!!!";

    fp= fopen("fprintf.txt", "w");
    fprintf(fp, "%s\n", buffer);


<< まとめ >>
(1) ファイルの開く閉じるはfopen,fcloseを使う
(2) ファイル読込はfscanf、ファイル出力はfprintfを使う

【参考URL】
http://vivi.dyndns.org/tech/cpp/pointer.html 
http://itpro.nikkeibp.co.jp/article/COLUMN/20061206/256198/
http://miffysora.wikidot.com/ja:fileread
http://d.hatena.ne.jp/nagardjunas/20110524/1306231384
http://www9.plala.or.jp/sgwr-t/c/sec17.html
http://simd.jugem.jp/?eid=49
http://qiita.com/kyoshiro-obj/items/9f36aa4666eafcbf78ad
http://bituse.info/c_func/46

※ポインタについて詳しく勉強したい人は次の本をおすすめします。
C言語ポインタ完全制覇 (標準プログラマーズライブラリ)
http://www.amazon.co.jp/C%E8%A8%80%E8%AA%9E%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E5%AE%8C%E5%85%A8%E5%88%B6%E8%A6%87-%E6%A8%99%E6%BA%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-%E5%89%8D%E6%A9%8B-%E5%92%8C%E5%BC%A5/dp/4774111422

0 件のコメント:

コメントを投稿