//http://stackoverflow.com/questions/28524896/casting-pointer-to-memory-buffer-to-pointer-to-vla
#include <stdio.h>
#include <stdlib.h>
int *getPointer(int num){
return malloc(sizeof(int) * num
); }
void test1()
{
#define ARRSIZE 6
int *pointer = getPointer(ARRSIZE);
int (*arrPointer)[ARRSIZE] = (int(*)[ARRSIZE])pointer;
printf("%d\n", sizeof(*arrPointer
) / sizeof((*arrPointer
)[0])); }
void test2( int arrSize )
{
int *pointer = getPointer(arrSize);
int (*arrPointer)[arrSize] = (int(*)[arrSize])pointer;
printf("%d\n", sizeof(*arrPointer
) / sizeof((*arrPointer
)[0])); }
int main()
{
test1();
test2( 5 );
test2( 3 );
return 0;
}
Ly9odHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4NTI0ODk2L2Nhc3RpbmctcG9pbnRlci10by1tZW1vcnktYnVmZmVyLXRvLXBvaW50ZXItdG8tdmxhCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgppbnQgKmdldFBvaW50ZXIoaW50IG51bSl7CiAgICByZXR1cm4gbWFsbG9jKHNpemVvZihpbnQpICogbnVtKTsKfQoKdm9pZCB0ZXN0MSgpCnsKICAgICNkZWZpbmUgQVJSU0laRSA2CiAgICBpbnQgKnBvaW50ZXIgPSBnZXRQb2ludGVyKEFSUlNJWkUpOwogICAgaW50ICgqYXJyUG9pbnRlcilbQVJSU0laRV0gPSAoaW50KCopW0FSUlNJWkVdKXBvaW50ZXI7CiAgICBwcmludGYoIiVkXG4iLCBzaXplb2YoKmFyclBvaW50ZXIpIC8gc2l6ZW9mKCgqYXJyUG9pbnRlcilbMF0pKTsKfQoKdm9pZCB0ZXN0MiggaW50IGFyclNpemUgKQp7CiAgICBpbnQgKnBvaW50ZXIgPSBnZXRQb2ludGVyKGFyclNpemUpOwogICAgaW50ICgqYXJyUG9pbnRlcilbYXJyU2l6ZV0gPSAoaW50KCopW2FyclNpemVdKXBvaW50ZXI7CiAgICBwcmludGYoIiVkXG4iLCBzaXplb2YoKmFyclBvaW50ZXIpIC8gc2l6ZW9mKCgqYXJyUG9pbnRlcilbMF0pKTsKfQoKaW50IG1haW4oKQp7Cgl0ZXN0MSgpOwoJdGVzdDIoIDUgKTsKCXRlc3QyKCAzICk7CiAgICByZXR1cm4gMDsKfQo=