Я стесняюсь публиковать это вообще, но я надеюсь, что это выиграет Это не проблема.
Чтобы быть педантичным: большинство других ответов неверны: то, что вы создали, - это не указатель на массив.Это указатель на int
, который ссылается на начальный элемент массива.
Я стесняюсь публиковать об этом по той простой причине, что это почти наверняка связано с неправильной формулировкой в вашем вопросе - указатель на int
почти наверняка то, что вы считали нужным, и это то, что вы действительно получил.
Существует, однако, такая вещь, как указатель на массив. Это редко полезно, потому что когда/если вы выполняете на нем указательную математику (включая подписи), указатель на массив работает с увеличением размера массива, на который он указывает. В вашем случае вы назначаете 10 int
с. Вы можете использовать subscriptipting с указателем, чтобы ссылаться на int
s в массиве, поэтому theName[0]
относится к первым int
, theName[1]
ко второму int
и т. Д. - именно то, что вы обычно хотите.
Вы могли быть в состоянии сделать реальное использование указателя на массив, если вы работали с (например) массивом массивов, и хотели указатель, который будет идти через что целый ряд в то время, так что ptr[0]
был первым рядом, ptr[1]
второй ряд и так далее. Например:
#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]
имеет адрес один больше. Однако указатель на массив содержит адрес 0x40 - 0x2C = 0x14 = 20 больше - который соответствует размеру X, который мы передали массиву (20). Другими словами, у нас действительно есть указатель на массив, а арифметика указателя (или, что то же самое, подписи) на этом указателе работает в терминах целого массива за раз.
Я буду повторять, хотя: по крайней мере, если мы будем игнорировать тот факт, что вы почти наверняка должны быть, используя std::vector
вместо этого типа вы хотите и тип вы получили оба pointer to int
. Там такой тип, как pointer to array
, но это почти наверняка не хочу, чтобы вы действительно хотели.
Если у вас нет действительно веской причины для этого, вы должны просто использовать 'std :: vector'. –
, возможно, не выполняет выделение кучи с таким малым массивом. – chikuba