私は動的に割り当てられた1D配列を持っていて、ダブルポインタ(** ptr)をポイントしてからptrを2D配列として扱いたいのですが、2D配列の幅を設定する必要がありますこれを行う方法はありますか?例えば、私が8×10の2D配列として扱う次元80の配列を持っているとすると、((ptr)+1)は10単位移動します。私は手動でそれをarr [i row + j]として使用できることを知っていますが、私はそれを他の方法で行うことを好むでしょう。ご協力いただきありがとうございます!!!ポインタを使用して二次元アレイとして一次元アレイを再解釈するcでポインタの幅を設定する方法は?
0
A
答えて
3
:
Type a[80];
Type (*b)[10] = (Type (*)[10])a;//or simply (void*)a. b is pointer to Type[10]
b[i][j]
注使用:(**ptr
などのような) ダブルポインタは基本的に間違いです。
一般に、配列はポインタの配列ではありません。
int col = 10; Type (*b)[col] = (Type (*)[col])a;
また、C99以降のVLA(可変長配列)としても使用できます(c11のオプション)。
+0
[DEMO](http://ideone.com/w2Lrcm) – BLUEPIXY
1
TYPE**
は、TYPE*
オブジェクト以外を指すことはありません。 TYPE*
オブジェクトはありません。 TYPE
の配列は1ではありません。配列TYPE
のに加えて、TYPE*
の配列を割り当て、前者の各要素が後者の関連要素を指すように配置することができます。
TYPE* elements = malloc (N_rows * N_cols * sizeof(TYPE));
TYPE** rows = malloc (N_rows * sizeof(TYPE*));
for (i = 0; i < N_rows; ++i)
rows[i] = elements + N_cols * i;
これはむしろ非効率的で不便です。あなたの次元の1つがコンパイル時定数であるか、またはVLAを使うことができる場合、二重逆参照なしでそれを行う方法があります(他の答えで詳しく説明しますので、私は繰り返しません)。
関連する問題
- 1. Turbo C++グラフィックスでオブジェクトのカスタムボーダー幅を設定する方法は?
- 2. C#でビットマップに幅と高さを設定する方法は?
- 3. シーボーンバープロットの幅を設定する方法
- 4. ブートストラップで最小幅と最大幅を設定する方法
- 5. Mosquittoの設定プロパティをC++で設定する方法は?
- 6. AndroidでTableRowの幅をmaxに設定する方法は?
- 7. wordpressでdo_shortcodeinの高さと幅を設定する方法は?
- 8. JButtonの幅をパーセンテージで設定する方法は?
- 9. GXTで列幅の重みを設定する方法は?
- 10. WindowsフォームのTextBoxコントロールでTAB幅を設定する方法は?
- 11. phpwordで表の幅を設定する方法は?
- 12. fabricjsでsvgの幅と高さを設定する方法は?
- 13. イメージ幅をブートストラップ列の幅に設定する方法
- 14. ポインタのリストからCのポインタの内容を設定する
- 15. collection_check_boxesで幅をパーセントで設定する方法は?
- 16. ポインタをnil、objective-cに設定する
- 17. Python-docx、テーブルのセル幅を設定するには?テーブルのセルの幅を設定する方法
- 18. デルファイでポインタのアドレスを手動で設定する方法
- 19. GridView EditItemTemplateテキストボックスで最大セル幅を設定する方法は?
- 20. numpyで最大出力幅を設定する方法は?
- 21. Swift 3.0でtableviewセルセパレータを100%幅に設定する方法は?
- 22. XAML幅をパーセントで設定する方法は?
- 23. kendoTooltipカスタム幅を関数で設定する方法は?
- 24. Apache POIで固定列幅を設定する方法
- 25. Android:TableRow内でImageViewの幅をプログラムで設定する方法
- 26. Android:ImageButtonのsrcイメージの高さ/幅を設定する方法は?
- 27. ダイナミックドロップダウンリストのテーブルの列幅を設定する方法は?
- 28. tkinterのボタンの幅を設定する方法は?
- 29. matplotlibのエラーバーの線幅を設定する方法は?
- 30. JSF2.0の<h:outputText>の幅を設定する方法は?
'a [80]と入力します。型(* b)[10] =(型(*)[10])a; 'b [i] [j]'を使う。 – BLUEPIXY
10をcolなどの変数に置き換えることはできますか? (回答btwのおかげで)。 –
この問題では、 '幅'と '倍'という用語はあいまいです。 C言語の文脈では、通常はここで意図したのとは異なる意味を持つと理解されています。たぶん、あなたが意味することは疑問の中ではっきりしていますが、タイトル自体は誤解を招くものです。 – Clifford