[解決済み] ポインタ算術【閉
2022-03-04 18:02:24
質問
どなたかポインタ演算の良い記事、解説(ブログ、例題)をお持ちの方はいらっしゃいませんか? 読者はCやC++を学んでいるJavaプログラマーの一団です。
どのように解決するのですか?
まず ビンキー の動画が参考になるかもしれません。ポインターについての素敵なビデオです。算術演算については、以下のような例があります。
int * pa = NULL;
int * pb = NULL;
pa += 1; // pa++. behind the scenes, add sizeof(int) bytes
assert((pa - pb) == 1);
print_out(pa); // possibly outputs 0x4
print_out(pb); // possibly outputs 0x0 (if NULL is actually bit-wise 0x0)
<サブ (厳密にはNULLポインタの値を含むポインタをインクリメントすることは未定義の動作であることに注意してください。NULLを使ったのは、ポインタの値にしか興味がなかったからです。通常は、配列の要素を指す場合にのみ、increment/decrementを使用します)。
以下は、2つの重要な概念を示しています。
- ポインタに整数を加算/減算することは、ポインタをN要素分前進/後退させることを意味します。つまり、intが4バイトの場合、我々のプラットフォームでは、1増加した後に0x4が格納されることになります。
- あるポインタから別のポインタを引くことは、その距離を要素数で測定することを意味します。つまり、paからpbを引くと、両者の距離は1要素であるため、1が得られます。
実際の例について。あなたが関数を書き、人々が開始と終了のポインタを提供したとします(C++では非常に一般的なことです)。
void mutate_them(int *begin, int *end) {
// get the amount of elements
ptrdiff_t n = end - begin;
// allocate space for n elements to do something...
// then iterate. increment begin until it hits end
while(begin != end) {
// do something
begin++;
}
}
ptrdiff_t
は、(end - begin)の型が何であるかということです。あるコンパイラではint"の同義語かもしれませんし、別のコンパイラでは別の型かもしれません。しかし、それはわからない。そこで、一般的な型定義である
ptrdiff_t
.
関連
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
-
[解決済み] nullptrとは一体何ですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】strcmpが機能しない
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。