Я знаю, что на этот вопрос уже был дан ответ, но я считаю, что могу внести вклад в понимание айзера. начало
Давайте с основами:
void main()
{
int a = 2; // a is an int
cout << a << endl; // print 2
int *b; // b is a pointer-to-int
b = &a; // store the address of a in b
cout << *b << endl;// print the value that b points to, which is 2
int my_array = new int[3]; // allocate an array with 3 integers
my_array[0] = 50; // store 50 in the first element of the array
my_array[1] = 51; // store 51 in the second element of the array
my_array[2] = 52; // store 52 in the third element of the array
cout << c[0] << endl; // print 50
some_function(my_array, 3); // explained below
}
Теперь давайте посмотрим, как передавать массивы в функции. Предположим, мы хотим иметь функцию, называемую some_function
, которая получает массив.
void some_function(int *some_array, int size_of_the_array)
{
// use the array however you like here
}
Функция some_function
получает указатель на int
(также известный как «указатель на Int»). Имя массива всегда является адресом его первого элемента, поэтому, если функция ожидает указатель на int
и вы даете ему имя массива int
s, вы фактически указываете ему адрес первого элемента в array (это только синтаксические правила C++). Таким образом, функция теперь имеет адрес первого элемента в массиве, он может делать такие вещи, как *some_array
, для доступа к первому элементу массива, но что, если он хочет получить доступ к другим элементам? Он добавляет 1 к указателю, который он уже имеет, а затем применяет оператор * к нему: *(some_array + 1)
. Скажем, int
- это 4 байта, если вы добавите 1 к указателю на int, результатом этого добавления будет новый указатель, указывающий на местоположение в памяти на 4 байта вперед, поэтому *(some_array + 93)
- это значение в 94-м элементе массив some_array
(элементы массива сохраняются последовательно в памяти). Сокращенное обозначение для этого - some_array[93]
. Поэтому, если у вас есть int *some_array = new int[100];
, то some_array
является указателем и some_array[93]
- это то же самое, что и *(some_array + 93)
, что является 94-м элементом в массиве.
Недостаточно самого адреса, вам также нужно знать количество записей в массиве, чтобы вы не пытались получить доступ к элементу, находящемуся за концом массива. В этом примере предположим, что some_function
просто печатает содержимое массива, поэтому, если вы не предоставляете 3 в качестве второго аргумента функции, тогда у него не будет никакого способа узнать, когда прекратить добавлять 1 к указателю, который он получил в первый аргумент. Остерегайтесь, однако, что, передавая массив в функцию таким образом, вы не передаете функцию копию массива, вы просто говорите ей, где найти его содержимое в памяти.
Массив уже указатель. Удалите & from & MM при вызове findMM. – TheSavage
@TheSavage Это неправда! –
Можете ли вы дать мне более подробный ответ, потому что меня просто смутили ... – Pipsydoodles