Когда функция имеет параметр массива определенного размера, почему она заменяется указателем?

Перед вызовом к серверу запишите время JavaScript:

var startTime = new Date();

Загрузка изображение с сервера:

var img = new Image()
img.onload = function() {
    // record end time
}
img.src = "http://server1.domain.com/ping.jpg";

, Как только запрос закончен, запись время снова. (Данный, конечно, что запрос убрал не время.)

var endTime = new Date();

Ваш ping в миллисекундах:

var ping = endTime. getTime() - startTime.getTime();
65
задан einpoklum - reinstate Monica 6 December 2015 в 22:05
поделиться

2 ответа

Да, он унаследован от C. Функция:

void foo ( char a[100] );

Устанавливает параметр, чтобы он был указателем, и таким образом становится:

void foo ( char * a );

Если вы хотите, чтобы тип массива был сохранен, вы должен передать ссылку на массив:

void foo ( char (&a)[100] );

C ++ '03 8.3.5 / 3:

... Тип функции определяется с использованием следующих правил. Тип каждого параметра определяется его собственным описанием-описателем-объявлением и декларатором. После определения типа каждого параметра любой параметр типа «массив T» или «функция, возвращающая T» корректируется как «указатель на T» или «указатель на функцию, возвращающую T» соответственно ....

To объясните синтаксис:

Проверить наличие правила "право-лево" в Google; Я нашел одно его описание здесь . ссылка на массив из 100 символов

78
ответ дан 24 November 2019 в 15:30
поделиться

Да. В C и C ++ нельзя передавать массивы функциям. Просто так оно и есть.

Почему вы вообще делаете простые массивы? Вы смотрели на boost / std :: tr1 :: array / std :: array или std :: vector ?

Обратите внимание, что вы можете, однако, передать ссылку на массив произвольной длины в функцию template . Вне моей головы:

template< std::size_t N >
void f(char (&arr)[N])
{
  std::cout << sizeof(arr) << '\n';
}
13
ответ дан 24 November 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: