【第1部】C言語(K&R検証)編
0028.文字列の長さを調べる(ポインタ版)
このサンプルは
0009.文字列の長さを調べるを
配列版から
ポインタ版に書き直したものです。
C/C++では
配列とポインタには密接な関係にあり、とくに
関数の引数に使う場合、ほぼ同じように記述できます
ソース紹介
CPPファイルに記述
#include <iostream>
#include <cstdio>
using namespace std;
/*
sの長さを返す
*/
int strlen(char* s) {
int n;
for (n = 0; *s != '\0'; s++) {
n++;
}
return n;
}
/*
文字列の長さを調べる
*/
int main()
{
char str1[] = "hello";
char str2[] = "abcdefgh";
cout << str1 << "は" << strlen(str1) << "文字" << endl;
cout << str2 << "は" << strlen(str2) << "文字" << endl;
return 0;
}
出力
サンプル説明
これは
0009.文字列の長さを調べると同じ出力になります。
さらに言えば、
ポインタは
定数ではなく変数ですから、以下のようにも書けます。
ソース紹介
CPPファイルに記述
/*
sの長さを返す
*/
int64_t strlen(char* s) {
char* p = s;
while (*p != '\0') {
p++;
}
return p - s;
}
サンプル説明
ここで
int64_tは重要です。
64ビット環境では
アドレッシングモードは
64ビットです。ポインタの大きさは
アドレッシングモードに依存します。32ビット環境であれば、
アドレッシングモードは
32ビットなので
intで問題ありません。
K&Rでの記述
元になったのは
第5章:ポインタと配列に記述されています。
ポインタと配列、および、アドレス計算の説明のところです。