いいえ、非常に基本的な質問ですが、私はそれに固執しています。私は配列の終わりに余分な神秘的な値を把握することはできません。私はちょうどその基本アドレスを使って配列を横断しようとしました。しかし、配列の最後のガベージ値は、実行するたびに一定のままです。余分な要素を与えるポインタで配列にアクセスする
g ++コンパイラ64ビットマシン。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
void printarray(int * arr){
while(*(arr)){ cout<<*arr<<" "; arr++; }
cout<<endl;
}
int main(){
int arr[] = { 3,2,4,1,5 };
printarray(arr); // prints 3,2,4,1,5,32765
return 0;
}
EDIT 1:whileは、配列の0を渡ったときに終了するか、0が見つからないときには異常終了することを理解しています。しかし、それでもまだ、私はあなたたちには、次のテストケース
を見てみたいと思う3,2,0,4,1,5 // outputs 3,2
3,2,4,1,5,7,8,9 // outputs same array correctly
3,2,4,1,5,7,8,9,10 // outputs array+ 1 varying garbage at last
//observations, this method works for even sized arrays not containing
//0, while for odd it emits an additional garbage value.
中のみ0で破った場合私の質問は、なぜそれが
にarrayLength + 1毎回で壊れるんですか?この奇妙な長さには何がありますか?
statement by statementをデバッグしましたか? –
while(*(arr)) 'なぜこれを使用しますか?配列の最後に到達した時点で、それはすでに遅すぎて、あなたのコードはまだ狂った不思議の国(別名未定義の動作)になっています。 – user463035818
'while(*(arr))'はゼロ終了配列を期待していますが、 。次の任意の0が見つかるまで、範囲外の配列にアクセスしています。 –