Используя ES2017, вы должны иметь это как объявление функции
async function foo() {
var response = await $.ajax({url: '...'})
return response;
}
и выполнить его следующим образом.
(async function() {
try {
var result = await foo()
console.log(result)
} catch (e) {}
})()
Или синтаксис Promise
foo().then(response => {
console.log(response)
}).catch(error => {
console.log(error)
})
Вам нужно помнить, что в массиве переменных массивов нет возможности извлекать размер массива из указателя.
const int SIZE = 10;
int list[SIZE];
// or
int* list = new int[SIZE]; // do not forget to delete[]
Невозможно это сделать. Это одна хорошая причина (среди многих) использовать векторы вместо массивов. Но если вы должны использовать массив, вы должны передать размер массива в качестве параметра вашей функции
int largest(int *list, int list_size, int highest_index)
Массивы на C ++ довольно бедны, тем скорее вы научитесь использовать векторы, тем легче вы будете найти вещи.
C ++ основан на C и наследует многие функции от него. В связи с этим вопросом он наследует что-то под названием «эквивалентность массива / указателя», которая является правилом, которое позволяет массиву распадаться на указатель, особенно при передаче в качестве аргумента функции. Это не означает, что массив является указателем, это просто означает, что он может распадаться на один.
void func(int* ptr);
int array[5];
int* ptr = array; // valid, equivalent to 'ptr = &array[0]'
func(array); // equivalent to func(&array[0]);
Эта последняя часть наиболее важна для вашего вопроса. Вы передаете not массив, вы передаете адрес 0-го элемента.
Чтобы ваша функция узнала, насколько велик входящий массив, вам нужно будет отправить эта информация как аргумент.
static const size_t ArraySize = 5;
int array[ArraySize];
func(array, ArraySize);
Поскольку указатель не содержит информации о размере, вы не можете использовать sizeof.
void func(int* array) {
std::cout << sizeof(array) << "\n";
}
Это выведет размер «int * "- это 4 или 8 байтов в зависимости от 32 против 64 бит.
Вместо этого вам нужно принять параметры размера
void func(int* array, size_t arraySize);
static const size_t ArraySize = 5;
int array[ArraySize];
func(array, ArraySize);
Даже если вы попытаетесь передать фиксированный размер массив, оказывается, это синтаксический сахар:
void func(int array[5]);
Помните, как я сказал, что массив НЕ является указателем, эквивалентным?
int array[5];
int* ptr = array;
std::cout << "array size " << sizeof(array) << std::endl;
std::cout << "ptr size " << sizeof(ptr) << str::endl;
размер массива будет 5 * sizeof (int) = 20 ptr size будет sizeof (int *), который будет либо 4, либо 8 байтами.
sizeof возвращает размер поставляемого типа, если вы поставляете объект, тогда он выводит тип и возвращает размер этого
. Если вы хотите знать как человек y элементов массива находятся в массиве, когда у вас есть массив, а не указатель, вы можете написать
sizeof(array) / sizeof(array[0])
или sizeof (array) / sizeof (* array)
Простой ответ: вы не можете. Вам нужно сохранить его в переменной. Большим преимуществом C ++ является наличие STL, и вы можете использовать вектор. size () дает размер вектора в этот момент.
#include<iostream>
#include<vector>
using namespace std;
int main () {
vector<int> v;
for(int i = 0; i < 10; i++) {
v.push_back(i);
}
cout << v.size() << endl;
for(int i = 0; i < 10; i++) {
v.push_back(i);
}
cout << v.size() << endl;
return 0;
}
output: 10 20
Не тестировалось. Но, должен работать. ;) [/ Д2]
Указатели не имеют информации о количестве элементов, на которые они ссылаются. Если вы говорите о первом аргументе вызова функции, то если список - это массив, вы действительно можете использовать синтаксис
sizeof( list ) / sizeof( int )
Я хотел бы добавить, что существует три подхода. Первый - использовать массивы, переданные по ссылке. Второй - использовать указатель на первый элемент и количество элементов. И третий - использовать два указателя - обычно указатель начала и последний указатель как стандартные алгоритмы. У массивов персонажей есть дополнительная возможность обрабатывать их.