C++プログラムでこの行について混乱します。プログラムのアイデアは、4x4
配列が対称かどうかをチェックすることです。コードのこの部分は、私が理解していない2D配列を宣言します。ダブルポインタを使用して2D配列を宣言する
int** array = new int*[n];
これとは別の質問がありますが、私が得るのは単なるポインタです。
int *array = new int[n];
私はダブルポインタを理解していません。親切に説明してください。
C++プログラムでこの行について混乱します。プログラムのアイデアは、4x4
配列が対称かどうかをチェックすることです。コードのこの部分は、私が理解していない2D配列を宣言します。ダブルポインタを使用して2D配列を宣言する
int** array = new int*[n];
これとは別の質問がありますが、私が得るのは単なるポインタです。
int *array = new int[n];
私はダブルポインタを理解していません。親切に説明してください。
どのようにして1つのポインタ配列を作成しますか?あなたはこれを行う:
int* myArray = new int[n];
これはどういう意味ですか?それは2つの部分を持っています。最初の部分はint*
というポインタを予約しています.2番目の部分はn
要素を予約していて、それぞれサイズがint
(これは配列ですか?)で、その配列のアドレスを取得して保存しますそれは変数myArray
にあります。
これで、配列の配列である2D配列が必要になります。ですから、この新しい配列配列の各要素は、これらのうちの1つです。これをどうやって予約しますか?私たちは行います
new int*[n];
私たちは前の話という、タイプint*
とそれぞれ、n
スロットを予約しているため。
戻り値の型は何ですか?これは、配列の配列、またはだ「配列へのポインタ、後者はまた、配列へのポインタである」、あなたは
(int*)*
それとも
int**
としてそれを書くようになりますので、
int** array = new int*[n];
"...配列の配列である2D配列" - そのステートメントは正確です。しかし、OPの混乱は、*配列の配列を*ポインタの配列*と混同することによってさらに進化する必要はありません。彼らは**同義語ではありません。後者は統語的な砂糖を前者のように見せますが、彼らは決して同じではありません。私はOPがこれを把握してくれることを願っています。なぜなら、 'int ** ar'が期待される関数に' int [n] [m];として宣言された ' – WhozCraig
@WhozCraig私は物事を体系的に理解できるようにするのが好きです。それが私がそこでやろうとしたことです。 –
@TheQuantumPhysicistあなたの説明は本当に役に立ちました。どうもありがとうございます。 – TheLearner
int** array
int
へのポインタへのポインタです。だから、これを行うことによって:
int** array = new int*[n];
あなたはn
int*
ポインタを保持するメモリのセクションを作成し、そのメモリにarray
を指しています。あなたが作成したこれらのポインタのそれぞれについて、そうのようなint
秒のセットを作成することが可能である:
for (auto i = 0; i < n; ++i)
array[i] = new int[n];
たメモリは次のようになります。
array -> [ int* | int * | .... n
[int | int | ...][int | int | ...][ ... n
しかし、これはある、多くのすなわち、もしC++でstd
物事のいくつかを使用する場合ははるかに簡単std::vector
:
std::vector<std::vector<int>> arr(std::vector<int>(0, n), n);
、あなたが行われてい...
非常によく説明されています。ご協力ありがとうございました。 – TheLearner
このように考えてみましょう。最初のものは、それぞれがすでに理解している2行目と同じようなものを割り当てることができる 'n'個のポインタの配列を割り当てることです。次に、array [i]によってデータのi番目の "行"にアクセスします。しかし、それは単なるint *です。したがって、array [i] [j] 'を使ってデータの*第j番目の" column "にアクセスすることができます。 – WhozCraig