2つのポインタ変数aとbがある場合、 "a < b"という文を使用するのはどういう意味ですか?メモリアドレスの値を比較することになっていますか?もしそうなら、コンピュータのメモリアドレスの順序はどうなりますか?関係演算子を使用してポインタを比較するのはどういう意味ですか?
答えて
CとC++では、同じ配列に2つのポインタがあり、それらの相対的な順序を見たい場合に、比較演算子を使用するポインタを比較できます(この規則の例外は少しありますがビット)。例えば、p
とq
ここに示されているようにアレイarr
の中央にどこか各ポイント、と想像:「配列のインデックスであり、この場合
int arr[9];
int* p = &arr[1];
int* q = &arr[4];
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
arr | | | | | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
^ ^
| |
p q
、p < q
を尋ねる表現よりも低いでp
点配列内のインデックスはq
を指していますか? "上記の文脈では、答えは「はい」です。 p
とq
が逆転した場合、まったく同じ要素を指している場合、答えは「いいえ」となります。
CとC++の言語標準では、同じ配列を指していないポインタを比較した結果は不定であり、無関係なオブジェクトがメモリ内でかなりランダムに散在する可能性があるため直感的に意味があります。実装に依存した方法で関連しています(スタックが増えたり減ったりしますか?)
これの例外の1つは、配列の最後の1つのオブジェクトを比較して、アレイ。たとえば、この設定を見てみましょう:
ここ int arr[9];
int* p = &arr[1];
int* q = &arr[9];
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
arr | | | | | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
^ ^
| |
p q
、qは、配列arr
に指していません。ただし、言語仕様を使用すると、pとqを安全に比較できます。これは、たとえば、C++でこのイテレータスタイルのループを安全に使用できる理由です。
for (int* itr = arr; itr != arr + /* arr's size */; itr++) {
...
}
追加する: "...同じ配列に2つのポインタがある場合は_またはオブジェクト_"この配列の説明は、1つのオブジェクトが1つの配列であるかのように単一のオブジェクトにも適用されます。 'some_type x;' '&x + 1>&x'はよく定義されています。 §6.5.84 – chux
同じオブジェクト内の 'double b 'へのポインタを持つstructオブジェクトの' int a'へのポインタなど、同じ集約オブジェクトのメンバへのポインタを比較することもできます。 –
@EricPostpischil私はあなたがそれをすることができるか分からなかった。厳密なエイリアス違反を避けるために、さまざまな型のオブジェクト間で 'char *'ポインタを使う必要があると思いますか? – templatetypedef
- 1. PHPの!==比較演算子はどういう意味ですか?
- 2. 比較演算子への関数ポインタ
- 3. ハスケルの/ =演算子はどういう意味ですか?
- 4. Rの%||%演算子はどういう意味ですか?
- 5. 演算子 '=>'はC#でどういう意味ですか?
- 6. Google Bigクエリの関係演算子を使用して日付を比較
- 7. Chisel3の&、 - %、+&、+%の演算子で '&'と '%'はどういう意味ですか?
- 8. range関数が比較演算子を無視しているようです
- 9. 何かがPHPで2 - >演算子を使用するとどういう意味ですか?
- 10. Clojureで#^演算子は何を意味していますか?
- 11. C++ - std :: cin.getline()で 'dot'演算子を使用するとどういう意味ですか?
- 12. 演算子の意味は?|
- 13. Xval演算子と比較演算子?
- 14. "+ +"演算子の意味(++ではない)
- 15. 用語比較演算子と等しいかどうかの差異
- 16. プロローグ演算子 "_:_" - 意味は?
- 17. 比較演算子とNeo4jの問合せの関係
- 18. マージモジュールの依存関係はどういう意味ですか?
- 19. オーバーロード比較です演算子「無効な演算子は、<」
- 20. angularjsの比較演算子関数
- 21. Javascriptを:比較演算子
- 22. PHPの等価比較演算子と同一比較演算子の違いは何ですか?
- 23. 比較演算子を使用してJavaで日付を比較するにはどうすればよいですか?
- 24. 比較演算子は、| &andと比較して、または+ - Python
- 25. シンボルの比較演算子
- 26. GoogleTestでカスタム比較演算子を使用できない
- 27. stable_sortを使用して、カスタム比較演算子
- 28. ハッシュ値はどのような型ですか、比較演算子は使用できますか?
- 29. C++単項演算子はクラスの意味で何を使用しますか?
- 30. Scalaでは `# '演算子は何を意味しますか?
このようなことは非常に言語固有のものと思われます。いくつかの素朴なケースでは、ポインターは文字通り(または同じように扱うことができる)メモリーロケーションです。他のケースでは、それらは非常に特殊なタイプであり、演算子はタイプ固有の動作をします。 – jdv
関連[私はポインタが "p> nullptr" well-formedですか?](https://stackoverflow.com/q/26590267/1708801) –
[私の答えは、 ](https://stackoverflow.com/a/31151779/1708801)も関連しています。 –