A pointer and an array are two different things. In the first case, only the pointer lives in constant memory. In the second case, the entire array lives in constant memory. The first example only allocates storage that is the size of a float pointer (so 4 bytes or 8 bytes). The second example allocates storage for the full array of float values.
If you’re using a CC 3.5 or later GPU, the constant memory is the same as the texture cache (called the read-only cache), I believe.
Then, instead of partitioning the data yourself, you can just let the hardware cache it in the read-only cache. You can do that by declaring your array as const restrict or by explicitly using ldg().