A heatmap stores the labels in the XDisplayLabels property. It is not a matlab.graphics.axis.Axes, but rather a matlab.graphics.chart.HeatMap which contains a hidden Axes. There is a reason you get the warning when you pass ax to struct and this is because you are seeing undocumented properties which you are not really meant to interact with. If you see this, you should probably be looking for a documented way of doing this, such as looking at the properties using:
Here we see the documented property XDisplayLabels, and changing this gives the desires result.
ax.XDisplayLabels = num2cell(0:23);
So the moral of the story is that undocumented stuff is nice when you have no other options ... but this should be the last resort!