C言語 知らなきゃ知らなくても構わない細かいテクニック ver.2

「 C言語 知らなきゃ知らなくても構わない細かいテクニック ver.2」 に関する記事です。


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






C言語、1週間もたてば忘れてしまいそうなテクニック。紙にメモっても、そのうち絶対になくすのでブログにメモw
ver.1 の内容も改めて書き直しています。



・意外とわかっていないカンマ演算子の罠
x = 5;
y = 10;
という2文を
x = 5, y = 10;
と1行にまとめて記述することができる。これは、
for (i = 0, j = 0; i < n; i++) {
というように用いるカンマ演算子と同じ意味をもつ。
 ところで、実はこんな用い方もできる。
a = (x = 5, y = 10);
こうすると。最終的にカッコの中身に10が残り、aに10が代入される。
初めて知った人も多いかもしれないが、
while (scanf("%d", &n), n > 0) {
上記のような用い方は知っている人も多いかもしれない。これは、読み取った値が0以下ならループを抜けるという条件を1行で記述した例だ。

・便利な条件演算子
a = (x > y) ? x: y;
こうすると、aにxとyのうち大きい方が代入される。
row[(x > y) ? x : y]
func((x > y) ? x : y)
上記のような、配列番号や関数の引数など式しか記述できない箇所で威力を発揮する。

・配列の要素数が初期値の個数と等しい場合には、要素数を指定しなくてもよい。
int array[] = {5, 10, 15, 20}
この意味で、
main(int argc, char *argv[])
の*argv[]を理解することができる。
また、これに関連して、
char *row[] = {"Suncay", "Monday", "Thursday", …}
とすると、1単語の文字数、及び配列番号を指定せずに文字列を格納できる。

・配列で、初期値の数が配列の要素数に満たない場合、残りの要素には0が入れられる。
int array[100] = {-5, 0, 5}
例えば array[3] = 0 となる

・ポインタ演算子の増減の意味
int *ip;

ip++;
ip++ は sizeof(int)増えたことを表す

・ポインタの型変換
void *px;
x = *(int *)px;
とすると、整数が取り出せる。え?void型から整数? と思うかもしれないが、だいぶ前にqsort関数を用いるときにこんな使い方をしました。
 ちなみに
x = *(int *)&y;
という文は、x = yと同じ意味らしい。

・配列とポインタの関係。
Aを任意の配列とし、ポインタ変数pにAの先頭へのポインタが与えられているとする。このとき、次のいずれも同じ意味をもつ式である。
A[n]
p[n]
*(p + n)

・構造体の初期設定は2通りの書き方ができる。
struct complex {
 double real;
 double img;
}; x = {0, 0}
struct complex y = {0, 0}

・構造体は次のように構造体タグ名を省略したり、初期値の要素を省略したりできる
struct {
 double real;
 double img;
}; x = {0}
このとき、.imgには配列と同じように0が入る。





コメント
この記事へのコメント
このコメントは管理人のみ閲覧できます
2008/11/30(日) 22:04 | | #[ 編集]
うーん、よく分からない。でも、VAIOにDebianをインストールするときはとてもわかりやすかったです。
そのおかげで、うちのVAIOにも入れられました。ありがとうございました。
2008/11/30(日) 22:08 | URL | NOM #-[ 編集]
うーん、よく分からない。でも、VAIOにDebianをインストールするときはとてもわかりやすかったです。
そのおかげで、うちのVAIOにも入れられました。ありがとうございました。


ミスッた
2008/11/30(日) 22:10 | URL | NOM #-[ 編集]
何度もすいません。

操作を間違えたみたいなので、また、機会があったらコメントしていですかね?

ちなみに、ドメイン指定をしているので出来れば携帯からお願いします。
ふてぶてしくてすいません
2008/11/30(日) 22:16 | URL | NOM #-[ 編集]
コメントありがとうございます!
しばらく気づかなくてすいません。


何かあればどうぞコメントしてください。
2008/12/05(金) 13:57 | URL | 管理人 #-[ 編集]
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://tochiii.blog119.fc2.com/tb.php/159-27ed609e
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック