我正在编写一个程序,该程序向每个进程发送2个数字的数组。 我对数组表示法不满意。问题是,如果我想对分配了malloc的地址内存使用指针表示法,则无法访问第二个元素。 在此示例中,程序向每个进程发送一个带有指针符号的数组,其中包含数字1和2。然后,根将打印收到的消息。谢谢
$('.date-time').datetimepicker({
defaultDate: '0000-00-00 00:00:00',
dateFormat:'yy-mm-dd',
todayHighlight: 0,
showSecond: true,
timeFormat: 'hh:mm:ss',
stepHour: 1,
stepMinute: 10,
stepSecond: 10,
forceParse: 0
})
这是结果
#include "stdio.h"
#include "stdlib.h"
#include "mpi.h"
int main(int argc, char *argv[])
{
float *send = malloc(sizeof(float) * 2);
float *recv = malloc(sizeof(float) * 2);
/*
float send2[2], recv2[2];
send2[0] = 1;
send2[1] = 2;
*/
int rank, size;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
*(send) = 1;
*(send + sizeof(float)) = 2;
MPI_Send(send, 2, MPI_FLOAT, 0, 99, MPI_COMM_WORLD);
if (rank == 0)
{
for (int i = 0; i < size; i++)
{
MPI_Recv(recv, 2, MPI_FLOAT, i, 99, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("[%f][%f]\n", *(recv), *(recv + sizeof(float)));
//printf("[%f][%f]\n", recv2[0], recv2[1]);
}
}
MPI_Finalize();
return 0;
}
答案 0 :(得分:0)
对不起,花了将近3个小时后我才意识到
*(send + sizeof(float))=2
必须
*(send + 1) = 2;
与recv函数相同。 我认为沿着数组移动必须增加计算地址的地址,但这仅在您使用空指针的情况下。如果声明为浮点指针,则程序会知道该大小有多大。