It works now.
I use the tensor.data_ptr() which returns a void* pointer, I cast that to a float* pointer.
Here’s the final working code:
#include <ATen/ATen.h>
#include <iostream>
#include <cuComplex.h>
#include <cuda.h>
#include <cuda_runtime.h>

__global__
void moveVals(float* real, float* imag, cuComplex* dst, int len)
{
	int i = blockIdx.x * blockDim.x + threadIdx.x;

	if(i >= len)
		return;

	dst[i].x = real[i];
	dst[i].y = imag[i];
}

void toComplex_Cuda(at::Tensor real, at::Tensor imag, int len)
{
	cuComplex* h_data;
	cuComplex* d_data;
	h_data = (cuComplex *) malloc( len*sizeof(cuComplex));
	cudaMalloc((void **) &d_data, len*sizeof(cuComplex));
	cudaMemset(d_data,0,len*sizeof(cuComplex));

	float* realPtr;
	float* imagPtr;
	realPtr = (float *) real.data_ptr();
	imagPtr = (float *) imag.data_ptr();

	moveVals<<<1,len>>>(realPtr, imagPtr, d_data,len);

	cudaMemcpy(h_data,d_data,len*sizeof(cuComplex),cudaMemcpyDeviceToHost);

	printf("Check \n");
	for(int i = 0; i < len; i++)
	{
		printf("(%f, %f) \n", h_data[i].x, h_data[i].y);
	}
}

Thanks for your help!