Array length counting anomaly #include int len(int[]); int main (int argc, const char * argv[]) { int a[]={1,2,3,4,5,6,7,8}; int* i = a; printf("length is %d",(len(i))); return 0; } int len(int* a){ int count = 0; for (; *a!=''; a++) { count++; } return count; } size_t length = sizeof(a) / sizeof(a[0]); int a[] = {1,2,3,4,5,6,7,8}; size_t length = sizeof(a) / sizeof(a[0]); // In this case, sizeof(a[0]) // is the same as sizeof(int), because it's an int array. int *a = malloc(sizeof(int) * 10); size_t length = sizeof(a) / sizeof(a[0]); // WRONG!