const char* occurs(const char* s1, const char* st){
if(length(st)>length(s1)){
return 0;
}
int diff=length(s1)-length(st);
int i=0, j=0, k=0;
for(;i<=diff;i++){
j=i;
while(s1[j]==st[k] && st[k]!='\0'){
k++;
j++;
}
if(st[k]=='\0') return &s1[i];
}
return 0;
}
この関数は、別の文字列に最初に現れる文字列を返します。私の主な機能には、私はこのようにそれを呼び出す:ポインタを配列として使用して参照を返す
const char* occ = occurs(argv[1], argv[2]);
std::cout << &occ << " - " << occ << std::endl;
何私を混乱することです:ポインタOCCされ、私は(OCC)と、それを逆参照した値であるとして変数を書き込むことでアドレスを取得するべきではありません(* occ)? 通常の変数のように動作しているように見えるのはなぜですか(&のアドレスとoccの値を取得する)? 配列のように扱うと、C++はポインタに関する何かを変更しますか?配列意味論を使わずにs1とstをポインタとして考えることで問題を解決すれば、それはメモリに関して同じであろうか?
出力演算子 '<<'には、 'const char *'がCスタイルの文字列を出力するための特殊なオーバーロードがあります。 – user0042
'length 'を何度も呼び出すのは良い考えではありません。 'str :: string'をよく使う。 –
' << 'について知りませんでした。 また、良いアイデアではないことを知っています。より良いポインタ/配列を理解するのは単なる演習です( 'str :: string'を使用しないでください)、別の変数に長さを保存することをやめました。 – Dodicin