Написание пустых забав (int * tab); а void fun (int tab []) это то же самое?

0

Как в заголовках тем. Когда я пишу: void fun(int *tab){} это то же самое, что писать void fun(int tab[]){}?

  • 0
    Если вы не посчитаете лишний символ в [] ...
  • 0
    @jrok: что ты имеешь в виду? Что за «дополнительный персонаж»?
Показать ещё 3 комментария
Теги:
arrays

3 ответа

3
Лучший ответ

Да.

void fun(int *tab){}
void fun(int tab[]){}
void fun(int tab[10]){}  //whatever the size is

все равно для компилятора. Массив с размером или отсутствием распадается на указатель при передаче в качестве аргумента функции.

На практике избегайте использования последнего, поскольку это может привести к тому, что размер известен функции, а на самом деле это не так.

  • 0
    что делает его одним из самых вводящих в заблуждение синтаксических сахаров для начинающего программиста ...
  • 0
    интересно, полезно знать!
Показать ещё 2 комментария
2

Да, это так, и нет, вторая версия не позволит вам определить размер массива внутри функции. Он все еще распадается на указатель. :)

  • 1
    Как я мог определить размер массива с первой версией?
  • 0
    @nullpointer, вы не можете. Используйте std::array или std::vector или что-то еще.
Показать ещё 4 комментария
1

Да, это одно и то же... Когда вы объявляете массив, скажите int tab [] в своей программе.. и если вы хотите передать этот массив какой-либо другой функции, то вы фактически передаете местоположение базового адреса этого массива, т.е. & Tab [0], который указывается указателем, который вы используете как аргумент в функции, int * tab... Это фактически вызов по ссылке..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню