C言語

*cnt++; //ダメな例

cntの実体を +1することを想定した場合、 正しくは、 (*cnt)++; ※cntは、int *cnt; で宣言されているものとする。 -- *cnt++; だと単項式(ポインタ「*」も含まれる)より ++の方が優先度が高いため、 cntポインタ(アドレス)をプラス1し実体化したものとな…

scanf関数

scanfを使って int x; scanf("input:%d", &x); としていました。 コンパイルできるが、動作がおかしい。。なぜ。 と思って調べてみると。 int x; printf("input:"); scanf("%d", &x); としなくてはいけないことに気づきました。。

構造体

前に学校で勉強した 「構造体」 すっかり忘れている。。 #include <stdio.h> #include <string.h> //-- 構造体宣言 -- typedef struct dog { char name[20]; int age; }dog; int main(void) { dog mydog, yourdog; strcpy(mydog.name, "pochi"); mydog.age = 13; strcpy(yourdog</string.h></stdio.h>…

ポインタ

メモリ上のどの位置(番地 =アドレス)に変数を置くかは、"リンカ"が決める。 変数dataのアドレスを知りたい場合は、 printf("%p\n", &data); とする。 ポインタとは、アドレスを格納できる変数。 ポインタ宣言方法 int *pt; これを "「ポインタptの指すアドレスにある…

記憶クラス指定子 auto, extern, static ・・・

・auto (省略可): プログラム実行中にメモリ上に確保されたり消去されたりする一時的な変数(= ローカル変数)。 ・extern: 他のCソースで使っているグローバル変数を自Cソースでも使用する場合に用いる。 <test1.c> #include <stdio.h> int cnt; //グローバル変数 宣言 int main(void) { ShowCn</stdio.h></test1.c>…

NULL

※ラズパイでは、NULLは /usr/include/stdio.h に定義されている? と思ったが、 # define __need_NULL # include <stddef.h> だけしか表記が無かった。 再度、find / -name 'stddef.h' で stddef.hを探した。 /usr/src/linux-headers-4.9.0-8-common/include/linux/std</stddef.h>…

EOF -End Of File ファイル終端を示す。

EOF を printfで表示してみた。 結果 10進表記(%d) ⇒ -1 16進表記(%x) ⇒ ffffffff ← 32bit マイナス1の値 文字表記(%c) ⇒ 文字化けして表示された。(何の文字かは不明) ※ラズパイでは、EOFは /usr/include/stdio.h に定義されている(プリプロセッサという)。 …

continue文 ― for文・while文の次ループへスキップする。

■ while, for文のループ中に次ループへスキップするには、"continue"を 使用する。 例: iが5の倍数の時は次ループへスキップ。iが1~100まで処理。 int i=1; while(i <= 100) { if(i%5 == 0) { printf("Next\r\n"); i++; continue; } printf("%d\r\n", i); …

break文 ― for文・while文を途中終了する。

■ while, for文を途中終了するには、"break"を使用する。 ※ループがネスト構造になっているときは、break文の存在するループをひとつだけ抜ける。 ネスト構造(=入れ子構造) ⇒この場合だと、ループの中にループがある場合。 例: iが1~100まで表示処理する…

文字列 代入

文字列の扱いは、難しい(ややこしい)。。 char str = "abcd"; 初期化時には、このような感じで文字列を代入できる。 配列の要素数は、文字数 + 1{ヌル文字(0)} の数で設定される。⇒この場合は、5つ。 文字列を途中で追加(結合)する場合は、 strcpy(str,…

番地 、 文字列

メモリ番地 ・ 1つの番地のメモリ容量は、1バイト。 ・示されたアドレスから何バイト使用するかは型で決まる。 文字列 ・文字列の終端には0(数字0(ゼロ):ヌル文字)を置く。 'A', 'B', 'C', 0 ・文字列の配列宣言は、文字列終端の 0 を含めた数で用意す…

コンパイル と リンク

コンパイル : Cソースからオブジェクトファイル(機械語)を生成する。 リンク : オブジェクトファイル と オブジェクトファイル および 参照された標準ライブラリをリンクする。 -- 一般に、“cc” や “cl” コマンドを実行すると、コンパイル&リンクが同…