The point is that just because something can be represented as the result of malloc(), doesn't make the data structure the same as that thing. That is, what is:
float* x = malloc(width*height*channels*sizeof(float))
Is x an "Image"? Is x a "tensor"? Is x a "raster"?
For tensors specifically, if x is not itself the product of vector spaces, then it's not a tensor.
tl;dr: While every rank-N tensor can be represented with multidimensional arrays, not all multidimensional arrays are rank-N tensors.