投稿するのは躊躇しますが、問題ないことを願っています。
衒学者になるために:他の答えのほとんどは間違っています:あなたが作成したものは配列へのポインタではありません。int
これは、配列の最初の要素を参照するへのポインタです。
これはほぼ間違いなくあなたの質問で間違った言い回しを使用しただけの問題であるという単純な理由でそれについて投稿することを躊躇します-ポインタint
はほぼ間違いなくあなたが望んでいたと思ったものであり、それはあなたが本当に得たものです。
ただし、配列へのポインタなどがあります。ポインタ計算(添え字を含む)を実行すると、配列へのポインタが、それが指している配列のサイズを増分して機能するため、これが役立つことはめったにありません。あなたの場合、10int
秒を割り当てます。ポインタから添え字を使用int
して配列内のsを参照できるためtheName[0]
、最初のint
、theName[1]
2番目int
の、というように参照できます。これは、通常必要なものです。
(たとえば)配列の配列を操作していて、一度にその行全体をウォークスルーするポインターが必要な場合は、配列へのポインターを実際に使用できる可能性がありますptr[0]
。最初の行も同様です。ptr[1]
2行目など。例えば:
#include <iostream>
static const int x = 20;
static const int y = 10;
int main() {
char data[y][x];
auto ptr_array = &data[0];
char *ptr_char = &data[0][0];
std::cout << "Address of entire array: " << (void *)data << "\n";
std::cout << "char *[0] = " << (void *)ptr_char << "\n";
std::cout << "char *[1] = " << (void *)(ptr_char+1) << "\n";
std::cout << "array *[0] = " << (void *)ptr_array << "\n";
std::cout << "array *[1] = " << (void *)(ptr_array+1) << "\n";
return 0;
}
私はこれをchar
(の代わりにint
)の配列の配列で動作するように変更して、数学をもう少しわかりやすくしました- sizeof(char) == 1
(定義上)数学を理解するのが少し簡単になりました。自分のマシンでこのコードを実行すると、取得するアドレスは次のとおりです。
Address of entire array: 0047FD2C
char *[0] = 0047FD2C
char *[1] = 0047FD2D
array *[0] = 0047FD2C
array *[1] = 0047FD40
ご覧のとおり、ptr[0]
いずれかの方法で配列全体のアドレスを保持します。ただし、へのポインタを使用するとchar
、ptr[1]
1つ大きいアドレスを保持します。ただし、配列へのポインタは、アドレス0x40-0x2C = 0x14 = 20より大きいアドレスを保持します。これは、配列に指定したX次元(20)に適合します。言い換えると、実際には配列へのポインターがあり、このポインターに対するポインター演算(または同等に添え字)は、一度に配列全体に関して機能します。
ただし、繰り返します。少なくとも、代わりに使用する必要があるという事実を無視すると、必要なstd::vector
タイプと取得したタイプの両方が使用されpointer to int
ます。のようなタイプがありますが、それはあなたが本当に望んでいpointer to array
たことをほぼ確実に望んでいません。