Существует два типа массивов, которые вы должны различать. Один выглядит так:
type name[count];
Этот массив имеет тип type[count]
, который отличается для каждого count
. Хотя он конвертируется в type *
, он другой. Одно отличие состоит в том, что sizeof(name)
дает вам count*sizeof(type)
Другой тип массива выглядит так:
type *name;
Это просто указатель, который можно инициализировать с помощью массива, например, malloc
или new
. Тип этой переменной - type *
, и, как вы можете видеть, в этом типе нет информации count . Следовательно, sizeof(name)
дает размер указателя на вашем компьютере, например 4 или 8 байт.
Почему эти два sizeof
отличаются, спросите вы? Потому что sizeof
оценивается во время компиляции. Рассмотрим следующий код:
int n;
cin >> n;
type *name = new type[n];
Теперь, когда вы говорите sizeof(name)
, компилятор не может знать возможное будущее значение n
. Следовательно, он не может вычислить sizeof(name)
как реальный размер массива. Кроме того, указатель name
может даже не указывать на массив!
Что делать, спросите вы? Просто. Сохраняйте размер массива в переменной и перетаскивайте его туда, куда вы его берете. Так что в вашем случае это будет так:
void assignArray(int *myArray, int size)
{
for(int k = 0; k < size; ++k)
{
myArray[k] = k;
}
}