Глядя некоторые учебники онлайн, я заметил две разные MPI_SEND используют:Почему может функционировать параметр содержит адрес или переменные в C
Первый говорит начало буфера &a[500]
:
MPI_Send(&a[500], 500, MPI_INT, 1, 0, MPI_COMM_WORLD);
Второй говорит начало буфера b
:
MPI_Send(b, 500, MPI_INT, 0, 0, MPI_COMM_WORLD);
Я очень новой для C
поэтому, возможно, что-то делать с выведенным по ссылке/значению.
Мое предположение, что b
- это то же самое, что и &b
, но в первом случае использование swe &a[500]
, потому что мы начинаем с адреса в середине массива ??
Но почему бы вам просто не сказать a[500]
вместо &a[500]
?
Short: потому что 'a [500]' будет передавать * значение элемента * вместо его адреса. – usr2564301
Предполагая, что программа также содержит строку 'void * b = & a [500];', магии не происходит. –
'b' - это не то же самое, что' & b'. Если 'b' - массив, то' & b' является указателем на массив, который имеет разную семантику, чем указатель на первый элемент массива, хотя единственное, что интересует 'MPI_Send', а именно адрес, будет тоже самое.Если 'b' является указателем, то' & b' является указателем на указатель и несет совершенно другой адрес - передача его в 'MPI_Send', скорее всего, приведет к мусору или сбою. С другой стороны, 'b' эквивалентно' & b [0] '. Говорят, что имя массива распадается на указатель на первый элемент массива. –