関数string_length()をポインタを使って
以下のように記述することもできる。
関数の引数 strの型が char型の配列から char型のポインタに変わり、
whileループの条件式中で配列の値を参照している部分がポインタ変数を使っ
て値を参照する表現になっている。
/* ↓以前のコード */ /* int string_length(char str[]) { int len = 0; while (str[len] != '¥0') len++; return len; } */ /* ポインタを使ったコード */ int string_length(char *str) { int len = 0; while (*str++ != '¥0') len++; return len; }
上記のコードは以下のようにも書くことができる。
以下のコードでは、whileループの条件式が 0を偽(false)と判定することを利用している。
ポインタ変数 strの指すアドレスの値が '¥0'(= 0)以外の値である間ループを実行する。
int string_length(char *str) { int len = 0; while (*str++) len++; return len; }
もう一つの関数string_toupper()も同様にポインタを使って記述することができる。
関数string_length()の場合と同様に、配列表現だった部分が
ポインタ変数表現になっている。
/* ↓以前のコード */ /* void string_toupper(char dst[], char src[]) { int i = 0; while (src[i] != '¥0') { dst[i] = toupper(src[i]); i++; } dst[i] = '¥0'; } */ void string_toupper(char *dst, char *src) { while (*src != '¥0') *dst++ = toupper(*src++); *dst = '¥0'; }
上記のコードは以下のようにも書くことができる。
void string_toupper(char *dst, char *src) { while (*dst++ = toupper(*src++)) ; }
実行結果は同じである。
check 'A quick brown fox jumps over the lazy dog.' length is 42 A QUICK BROWN FOX JUMPS OVER THE LAZY DOG.