忍者ブログ
Since 14.Jan.2009:08:29 プログラミングと絵のブログ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


基本的な関数群の覚え書き

(int *)malloc(sizeof(int))
メモリを指定したサイズ分確保する関数
特徴は動的に確保するところ
ツリー構造やリスト構造などを作るときに使うらしい

(int *)がキャスト部分で、
今はintのポインタ型にキャストしている
(void *)とすると型を決めずにそのままメモリ確保だけする

malloc本体に渡すのが確保するサイズ
今はsizeof関数でint型用のサイズ(2バイト)を確保

使った後はfree関数で解放

free(xxx)
mallocで確保したメモリを解放する
引数はmallocで取ったメモリを代入したポインタ変数

strcpy(p, "xxx")
String Copyの略
char配列に文字列を代入する
pの部分には文字列の先頭アドレスが入る

stringの扱い方的に通常の代入では駄目らしい

strcmp("a", "b")
String Cmpressの略
つまり文字列比較の関数
==で比較しようとするとアドレスを比較するだけになっちゃうし
もしくは一文字ずつ地道に値を取り出して比較したりが必要

一致したら0を返して、あとは文字の文字コード順や文字サイズで、
aが大きかったら1以上, bが大きかったら-1以下を返す

strlen("xxx")
String Lengthの略
文字列の長さを取得

atoi("xxx")
Array to Integerの略
Stringを数字に直せたらIntegerに直す
"123abc45"のように変換できない文字を渡すと
変換できるとこまで変換して 123 が返ってくる
1文字目で変換できなかったら0

clock()
ストップウォッチのような関数
たぶん内部でstatic変数を使ってて
一度目に呼ばれたときは0を返してストップウォッチを開始する
次からは最初に呼ばれたときから経過した時間を返す

精度は10ms - 1msくらい
環境によって異なる

time(&t)
同じくストップウォッチ
精度が1秒くらいな代わりに実時間に近い値が計れる
代入したい変数のポインタを渡すのがちょっと特殊
あとはclock()と似たようなもん

最後に参照渡しのやり方の例
void swap(int *px, int *py)
{
int tmp;

tmp = *px;
*px = *py;
*py = tmp;
}
PR

RubyのCで書かれたライブラリとか
猫でもわかるプログラミングに書かれたノウハウとか
SQLite3のソースコードとかが読みたくてCの勉強中

昔はポインタとか分かんなかったけど
Rubyとかオブジェクト指向系の言語やったあとだと
ほとんど理解できる

staticグローバル変数はクラス変数に似てる
関数内のstaticローカル変数はインスタンス変数とクラス変数の中間くらい
構造体structはプロパティだけのクラス
ポインタは汎用性が高すぎる参照渡し
あとは

ポインタ型:
宣言: *p, 値: *p, アドレス: p

通常の型
宣言: data, 値: data, アドレス: &data

の形に合わせて使い分けるだけだし

一日で結構進んだ
やっぱり関数型に比べればかなりマシだなーw

  HOME  
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログ内検索
プロフィール
HN:
uguisu_an
年齢:
35
性別:
男性
誕生日:
1989/08/20
自己紹介:
基本的にテキトー
最新コメント
[10/01 くゆる]
[09/21 uguisu_an]
[09/17 mayigo]
[07/17 uguisu_an]
[07/15 shinh]
最新トラックバック
アクセス解析
フリーエリア
P R
忍者ブログ [PR]