Массивы распадаются на указатели, когда вы передаете их в качестве аргументов. Однако разложение массива не совпадает с адресом массива.
«Decay» - это то, как некоторые типы преобразуются при передаче в качестве аргументов функции. Несмотря на то, что v
имеет тип int [5]
, он передается в функцию int*
. Это поведение, которое многие люди не любят, но ему нечего делать.
Обратите внимание, что с другой стороны, тип &v
- это int (*)[5]
, то есть указатель на массив из 5 целых чисел. Этот тип не распадается, т. Е. Он не преобразуется автоматически в другой тип, если вы передаете его как параметр функции (и поэтому он не будет работать, если вы использовали его в своем примере, так как вам нужен указатель для целых чисел, а не для указателя на массив целых чисел).
«Правильная» вещь, которую нужно сделать (при условии, что распад - это нормально) - это сделать myFunc(v)
, так же, как вы делаете в своем фрагменте. Имейте в виду, что вы теряете информацию о границах массива, когда вы это делаете.
Вы спрашиваете, потому что у вас есть ошибка или вы спрашиваете, работает ли она последовательно? – Ryan
Попробуйте. Запустить его. Возможно, это работает. В любом случае, вы что-то узнаете. :) – Bucket
Да! Кажется, я работаю. Когда я запускаю его на VS2012, все выглядит отлично. Но когда я запускаю его в Linux, у меня возникла ошибка сегментации. Я не знаю точно, если это проблема. У меня возникла ошибка сегментации через 4 часа вычислений. Я спросил, потому что я подозреваю, что это может быть проблемой. –