まずはじめに、ポインタとファイル読込・出力について、まとめます。
尚、文法等については、省略いたします。
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 件のコメント:
コメントを投稿