私はインタビューでこの質問をしました。私はそれがヌル文字に遭遇するまで、文字を〜からコピーしていることを理解しています。だから、ポインタaとポインタsによって指されるアドレスも変わると私は信じていました。ポインタは配列内の次の要素を指しますが、アドレスは同じです。どうやって?
#include <iostream>
using namespace std;
static char s[15];
static char a[] = "giviwfovnsn212";
void myfunc(char*s, char*a){
while(*s++=*a++){
cout<<&a<<" "<<&s<<" "<<*a<<endl;
}
return;
}
int main() {
myfunc(s,a);
cout<<a<<" "<<s;
return 0;
}
しかし、私は次のような出力が得られます。
0xbf85b7d4 0xbf85b7d0 i
0xbf85b7d4 0xbf85b7d0 v
0xbf85b7d4 0xbf85b7d0 i
0xbf85b7d4 0xbf85b7d0 w
0xbf85b7d4 0xbf85b7d0 f
0xbf85b7d4 0xbf85b7d0 o
0xbf85b7d4 0xbf85b7d0 v
0xbf85b7d4 0xbf85b7d0 n
0xbf85b7d4 0xbf85b7d0 s
0xbf85b7d4 0xbf85b7d0 n
0xbf85b7d4 0xbf85b7d0 2
0xbf85b7d4 0xbf85b7d0 1
0xbf85b7d4 0xbf85b7d0 2
0xbf85b7d4 0xbf85b7d0
giviwfovnsn212 giviwfovnsn212
アドレスがあることが起こっているか、すべて同じですか?
'&a'と'&s'はアドレスのアドレスです。 'cout'行の両方で'& 'を削除してください。 –
あなたは何かをやっている*方法*あまりにもハード。単純なものを試してみましょう: 'void f(int n){++ n; } int main(){int a = 0; f(a); } 'あなたが最初にそれを理解していることを確認してください。 –
私は&aと&sで間違いを起こします。コピーが完了すると、ポインターは文字列の最後を指しています。ありがとう –