2009-07-01から1ヶ月間の記事一覧

C++でCの標準ヘッダを使う

C++

Cではstdio.hやstring.hなるものがありました。これらをC++で使うにはどうしたら良いか。 #include <cstdio> #include <cstring> int main () { char *str = "hogehoge"; printf("%d",strlen(str)); return 0; } $ main 8cstdioやcstringといったように先頭にcをつけて.h拡張</cstring></cstdio>…

7章 コンストラクタとデストラクタ

C++

http://www.geocities.jp/ky_webid/cpp/language/007.htmlなにやら難しそうな話が出てきましたね。 コンストラクタは、そのクラスをインスタンス化したときに、自動的に呼び出される特別なメンバ関数です。 ?がいっぱいです。そもそもインスタンス化って、…

6章 アクセス指定子

C++

http://www.geocities.jp/ky_webid/cpp/language/006.htmlpublicやprivateおよびprotectedのことをアクセス指定子というらしいです。publicはメンバ変数やメンバ関数がどこからでもアクセスできるという指定子。privateは宣言したそのクラスの関数内でのみア…

strpbrk関数

C K&R

K&R本 付録B3第二引数のどれかの文字にマッチしたらそのポインタを返す。使ってみます。 #include <stdio.h> #include <string.h> int main (void) { printf("%c\n",*strpbrk("foobar","abc")); return 0; } $ main b文字検索とかで使う?のかな。</string.h></stdio.h>

strspn関数とstrcspn関数

C K&R

K&R本 付録B3 size_t strspn(cs,ct)ctに入っている文字よりなるcsの接頭辞の長さを返すsize_t strcspn(cs,ct)ctにない文字よりなるcsの接頭辞の長さを返す なんかよく意味がわからないので実際に使ってみる。 #include <stdio.h> #include <string.h> int main (void) { printf(</string.h></stdio.h>…

rewind関数

C K&R

K&R本 付録B1.6ファイルポインタの位置を先頭に戻す関数。これはfseekとclearerrの組み合わせと同じ結果になる。 fseek(fp,0,SEEK_SET); clearerr(fp); rewind(fp)で一発で書けるので先頭に戻したいときはこれ使ったほうが楽だね。

2章 出力ストリーム

C++

http://www.geocities.jp/ky_webid/cpp/language/002.html C++の出力ストリームは、非常に強力です。というのも、printf関数等を使う場合と異なり、出力するデータの型を問わないからです。例えば、次のように書くのはどれも有効です。 std::cout << 123; st…

1章 最小のプログラム

C++

http://www.geocities.jp/ky_webid/cpp/language/001.html int main () {} C++ではCのようにANSI C以前の構文をサポートしていないので、引数が存在しない場合に(void)とわざわざ書く必要がない。また、main関数のreturnは省略可能な仕様らしい。 Hello Worl…

0章 はじめに

C++

http://www.geocities.jp/ky_webid/cpp/language/000.htmlとりあえず読んだ。これからC++の勉強を始めていきます。

C言語ポインタ完全制覇読了

とても面白い内容でした。ただJavaに対する不満が節々に表れていて少しくどいような気もしました。まぁ面白かったからそれはそれで良いと思いますが。特に勉強になったのが2章と3章あたり。この辺はWebで勉強してたときにあまり詳しく出てなかった内容なので…

4章 マニピュレータ

C++

http://www.geocities.jp/ky_webid/cpp/language/004.html基本的なマニピュレータの紹介です。 std::endl 改行コードを出力し、バッファをフラッシュします。 #include <iostream> int main () { std::cout << "foo" << std::endl; std::cout << "bar" << std::endl; r</iostream>…

3章 入力ストリーム

C++

http://www.geocities.jp/ky_webid/cpp/language/003.html前回の出力ストリームに引き続き、今回は入力ストリームのお話です。 #include <iostream> int main () { int num; std::cin >> num; std::cout << num; return 0; } $ main 123 123うまく動いてますね。数値じ</iostream>…

汎用的な連結リストを構築する

C言語ポインタ完全制覇 5-2-4連結リストは得てして同じような実装を量産する。そこで実際に持つべきデータをvoidポインタにしておくことで何でも格納可能な連結リストを実現できる。ただし何でも入ってしまうが故、何が入ってるのかわかりにくくなるので慎重…

VC2008でC++をコンパイルすると警告C4514が出る

C++

警告レベル最大だと C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\swprintf.inl(36) : warning C4514: 'swprintf' : 参照されていないインライン関数は削除されました。 C:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\swprintf.inl…

C言語学び始めて今日で一ヶ月

C

しかしながら全然進んでない・・・。こんな調子でちゃんと覚えられるんだろうか。C++の勉強もしたいんだけど結局まだ手がつけられていない。C言語で精一杯。結構頑張ってやってるんだけどダメダメだなぁ。メゲソウ。

scanfよりもfgets&sscanf(or sscanf_s)を使うこと

C言語ポインタ完全制覇 2-1書き忘れ。 scanfを使うと、マッチしなかったデータが入力ストリームの残ってしまうので次のscanf等の呼び出しでおかしくなってしまう可能性がある。それをさせないためにまずfgetsで改行までの入力を先に全て取得し、改めてsscanf…

細かいreallocはフラグメンテーション化を助長する

C言語ポインタ完全制覇 4-2-1realloc関数で必要な分をその都度確保していたらフラグメンテーション化の恐れがあるので、一般的にはreallocで一時変数を確保&拡張し使いまわすというのが正しいやり方のようです。ということで前に実装したファイルの内容を行…

ポインタの共用体

C言語ポインタ完全制覇 5-2-4あまりにもサイズの違うデータを共用体で宣言する場合は共用体のポインタを使うほうが良い。 union { Foo *foo; Bar *bar; Baz *baz; } u; ただし、mallocによるメモリ確保と、freeしなければならないというデメリットもある。ト…

C++開始

C++

http://www.geocities.jp/ky_webid/cpp/language/index.htmlとりあえず初めはまたこのサイトを参考にさせていただきます。一通り終わったら何か書籍を買おうかな。

さてそろそろC++のお勉強を始めようかな

C++

C言語も板についてきたので並行してC++の勉強も少しずつはじめて行きたいと思います。あまり一気にやってしまうと頭がこんがらがってくると思うので気をつけないといけないですね。

フラグメンテーションとrealloc関数

C言語ポインタ完全制覇 2-6-5、2-6-6 このあたりは凄く有用ですね。mallocを使うことで小さな空きブロックが溜まっていくのでメモリ効率が悪くなる。reallocだとその場所から拡張するので、うまく空きブロックに当たれば効率はいいが、無かった場合にコピー…

malloc関数の戻り値をキャストするなという話

C言語ポインタ完全制覇 2-6-1 よけいなキャストは書かないほうが、すっきりして読みやすいと思えるのですが。(中略)malloc()の戻り値をキャストするのはもうやめましょう。CはC++じゃないんですから。 僕は今のところmallocの戻り値を明示的にキャストしてい…

ヒープソートって難しい

http://www.geocities.jp/ky_webid/algorithm/022.htmlヒープソートです。木構造に見立てた?ソートのようです。読んでみたのですが、ややこしい・・・。もの凄いややこしいです・・・。ヒープの構築であるinsert_heap関数はわかりました。ですがヒープから…

Cの作者による言語Limbo

C言語ポインタ完全制覇 3-1-3C言語の開発者の1人、Dennis Ritchieが開発したLimboという言語があるらしい。全然知らなかった。機会があれば調べてみよう。

Cはメモリをどう使うのか

C言語ポインタ完全制覇 第2章 ここの説明は凄くいいですね。かなり勉強になってます。スタック構造で実行されているという部分も図解入りで凄くわかりやすかったです。また領域を破壊して無限ループしてしまうというサンプルもあり、すんなり頭に入ってきま…

可変長引数の関数は自重せよ

C言語ポインタ完全制覇 2-5-3 可変長引数の関数では、プロトタイプ宣言による引数の型チェックがききません。また、呼び出された側では、呼び出し側が正しく引数を渡していると全面的に信用して動くことしかできません。これらの点から、可変長引数を使った…

2次元配列の動的確保

C

C言語で2次元配列を動的に割り当てる4つの方法 - FLYINGcallocでいいのでは?と思ったんだけどよく考えたらcallocでもmallocでも書き方が違うだけで結局同じだよね、確か。(callocだと0クリアが入るという違いはあるものの)で、2次元配列なんですが、色…

マージソート

http://www.geocities.jp/ky_webid/algorithm/021.htmlマージソートです。いっぱいありますね、ソートって。 マージソートの最大の特徴は、配列のような直接アクセス(配列であれば添字によるアクセス)ができないリスト構造であっても、ソートを行える点に…

配列を関数の引数として値渡ししたい場合

C言語ポインタ完全制覇 1-3-6通常、配列は関数にそのまま渡すことはできません。関数に渡した時点でポインタ型でしか受け取れないからです。ですが、構造体を経由すれば可能であるということ。なるほど。実際にうまくいくか試してみます。 #include <stdio.h> struct </stdio.h>…

p++とp[i]の効率上の問題

C言語ポインタ完全制覇 1-3-4例えばループの中で何度もp[i]、つまり*(p+i)と書いてデータを参照するよりも、ループの初期化等でp++しておいたらループの中では*pで参照できるので効率が良い。 と、いうのは古の効率化手法らしい。今時のコンパイラなら最適化…