Edited at

C言語の値 メモ


C言語の値


printf()

printf("%d\n", printf("hogehoge")); // 8

文字の個数が返る。

printf("%d\n", printf("あいうえお")); // 15

日本語の場合は3倍に。マルチバイトだからかな。多分環境に依存。

printf("%d\n", printf("ハローworld")); // 14

失敗したら、負の数が返るらしい。(訂正)


scanf()

int x, y, z;

int foo = scanf("%d%d%d", &x, &y, &z); // 1 2 3を入力
printf("\n\n%d\n", foo); // 3

int x, y, z;

int foo = scanf("%d%d%d", &x, &y, &z); // 1 2 aを入力
printf("\n\n%d\n", foo); // 2

int x, y, z;

int foo = scanf("%d%d%d", &x, &y, &z); // a 1 2を入力
printf("\n\n%d\n", foo); // 0

代入されたものの個数が返る。

失敗したら、EOF。


puts()

printf("%d\n", puts("hogeあいうえお")); // 20

文字の個数+1が返る。日本語は3倍。+1になるのは多分\n


putchar()

printf("\n\n%c\n", putchar('a')); // a

int型の値が返る。


getchar()

int c;

while((c = getchar()) != EOF){ // a
printf("%c\n", c); // a
}

int型の値が返る。

主に文字として扱う。


1文字

printf("%d\n", '0'); // 48

文字コードが返る。

sizeof '0'とすると、4なので、実際には4バイトの数値

printf("%x\n", '0'); // 30

%xを用いれば、16進数の文字コードとしても表示可

文字の0と数値の0は異なる

printf("%x\n", '\0');

ヌル文字は0


文字列

char str[16];

printf("%p\n", str); // 0xXXXXXXXXXXXX

先頭文字列のポインタを意味する。

char str[16] = "Hello";

printf("%s\n", str); // Hello


文字列の表示

文字列の表示は%sでできる。(strそのものはポインタ)

(引数のポインタから\0まで文字列が表示される)

char str[16] = "Hello";

printf("%s\n", str+0); // Hello

これも一緒。

char str[16] = "Hello";

printf("%s\n", &str[0]); // Hello

str+n$\to$&str[n]

str+n$=$n+str

n+str$\to$&n[str]

とできるので、

char str[16] = "Hello";

printf("%s\n", &0[str]);

これも同様。


インクリメント

int n = 0;

printf("%d\n", n++); // 0
n = 0;
printf("%d\n", ++n); // 1
n = 0;
printf("%d\n", n+=1); // 1
n = 0;
printf("%d\n", n=n+1); // 1

n++のときは加算前の数。


論理演算子

printf("%d\n", 0 && 100);

printf("%d\n", 1 && 100);
printf("%d\n", 0 || 100);
printf("%d\n", 1 || 100);

Rubyと違い、真なら1、偽なら0。


sizeof 演算子

関数じゃないやつ

printf("%ld\n", sizeof(int)); // 4

型の大きさが計算される。(処理系依存)

printf("%ld\n", sizeof 'a') // 4;

1Bとおもいきや4B

printf("%ld\n", sizeof "hogehoge"); // 9

文字数+1たぶん、+1になるのは多分\0


NULL

printf("%p\n", NULL); // (nil)

ヌルポインタのアドレスを意味する。


EOF

printf("%d\n", EOF); // -1

負の定数が定義されている。

(処理系依存)